Tablo Yetkilerinin Başka Tabloya Tanımlanması

Merhaba,

Daha önce aldığım notun kaybolmaması adına bu yazıyı yazmak istedim. Paylaşacağım bu yazı içeriğinde yapılan işlemlerin sonucuna farklı yollardan da ulaşılabilir tabi. 

Tabloların belirli kullanıcılar tarafından erişilebilir olması için kullanıcıların tablolar üzerinde yetkiye ihtiyaçları vardır. Bunun için Postgres, GRANT komutu kullanılır. GRANT ile ilgili detaylı bilgiye buradan ulaşabilirsiniz.

Bir tablo üzerinde birden fazla kullanıcının farklı yetki tipinde yetkiye sahip olması olağandır. Belirli tablo üzerindeki kullanıcı yetkilerini aşağıdaki script ile görebilirsiniz.

SELECT grantor, grantee, privilege_type  
FROM information_schema.role_table_grants 
WHERE table_schema ='public' 
AND table_name = 'test_table';
 
Yeni bir tablo eklediniz ve mevcut tablonuzun üzerindeki kullanıcı yetkilerinin birebir yeni tablonuzda da olmasını isterseniz yukarıdaki scripti biraz daha değiştirerek GRANT scriptini SQL ile oluşturabilirsiniz. 

Öncesinde yukarıdaki scripti biraz daha değiştirelim ve kullanıcı bazında değil, yetki tipi (privilege_type) bazında gruplayalım.

SELECT privilege_type, string_agg(grantee, ', ') 
FROM information_schema.role_table_grants 
WHERE table_schema='public'  
AND table_name = 'test_table
GROUP BY privilege_type 
ORDER BY 1,2;

Artık elimizde SELECT, UPDATE, DELETE gibi kullanıcı gruplarının sahip olduğu yetkileri, yetki bazında listeledik. Şimdi son adım olan GRANT scriptini SQL ile oluşturulması adımı yazmak kaldı. Onu da aşağıdaki gibi oluşturabiliriz.

SELECT
'GRANT ' || privilege_type || ' ON TABLE ' || 'prvt' || '.' || 'new_table' || ' TO ' || string_agg(grantee, ', ') || ';'FROM information_schema.role_table_grants 
WHERE table_schema ='public'  
AND table_name = 'test_table' 
GROUP BY privilege_type 
ORDER BY 1;
 

Sevgiler,

Comments

Popular posts from this blog

PostgreSQL High Availability - Patroni 2

PostgreSQL Foreign Data Wrappers

PostgreSQL High Availability - Patroni 1