PostgreSQL, oluşturulan nesnelerin (şema, tablo, veritabanı, şablon, fonksiyon vb.) kullanım haklarını yönetmeye izin verir. Bir kullanıcı, bu nesneler üzerinde okuma, yazma, değiştirme, ekleme, çıkarma, oluşturma ve bunun gibi ayrıcalıkların birine veya birden fazlasına sahip olabilir.
Bu ayrıcalıklar şemalar için sadece iki tanedir. Bunlar, USAGE(kullanım) ve CREATE(oluşturma) yetkileri olarak adlandırılır.
Ön tanımlı olarak, kullanıcılar sahibi olmadıkları şemalardaki nesnelere ulaşamazlar. Bunun sağlanması için, kullanıcıya, USAGE yetkisi verilmelidir. Bu şemalara erişim izninden sonra, farklı kullanımlar için şema içindeki nesnelere özel, farklı yetkiler tanımlanabilir.
Bir kullanıcı başka bir kullanıcının şemasında nesne oluşturma yetkisine sahip olabilir. Bunun için bu kullanıcıya, CREATE yetkisi verilmelidir.
Yeni oluşturulan veri tabanlarının şema isimleri, ön tanımlı olarak 'public' dir. Bu şemalar, yine ön tanımlı olarak, tüm kullanıcılara USAGE ve CREATE yetkisi verilmiş şemalardır.
Yetki kontrolleri, yetki verme/kısıtlama/kaldırma:
> Veritabanında şemaları görüntülemek için \dn+ kullanılır. Bu komut ile aynı zamanda 'access privileges' sütununu da görürüz.
Örnek olarak pagila veritabanının şema listesi aşağıdaki gibidir:
Burada ilk sütun şema adını gösterir. İsmin ön tanımlı olarak, 'public' olması tüm kullanıcılara kullanım ve oluşturma yetkisi verilmiş olduğu anlamına gelir. İkinci sütun şema sahibini; dördüncü sütun şema tanımını verir. Üçüncü sütun ise ‘access privileges’ yani kullanım yetkileri sütunudur ve şu şekilde okunur:
> ‘yetki verilen kullanıcı=verilen yetkiler/yetki veren kullanıcı’
- Burada 'U' kullanım(USAGE), 'C' oluşturma(CREATE) yetkisini simgeler.
- Erişim ayrıcalıklarının ikinci satırında eşitliğin sol tarafı boş bırakılmıştır. Bu, ön tanımlı olan 'public' şemanın özelliği olarak, tüm kullanıcılara(PUBLIC) yetki verildiği anlamına gelir. Burada PUBLIC, şema ismi olan 'public' ile karıştırılmamalıdır. Herhangi bir şemanın yetkileri de tüm kullanıcılara verilebilir.
Yetki verme, GRANT komutu ile sağlanır. Bu komutun şemalar için kullanımı şöyledir:
> GRANT USAGE/CREATE/ALL ON SCHEMA şema_ismi TO yetki_verilen_kullanıcı;
Örnek olarak, deneme kullanıcısına kullanım ve oluşturma yetkisi verdikten sonra \dn+ komutundan alacağımız çıktı şöyledir:
>REVOKE USAGE/CREATE/ALL ON SCHEMA şema_ismi FROM yetki_verilen_kullanıcı;
Örnek olarak, deneme kullanıcısından CREATE yetkisini kaldırdıktan sonra \dn+ komutundan alacağımız çıktı şöyledir:
Örnek olarak, deneme kullanıcısından CREATE yetkisini kaldırdıktan sonra \dn+ komutundan alacağımız çıktı şöyledir:
GRANT komutu ile yapılan diğer yetkilendirmelere örnekeler:
" https://www.postgresql.org/docs/current/sql-grant.html "
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
Tablolar ve sütunlara verilen yetkilere \dp komutu ile bakılır ve çıktılar şu şekilde okunur:rolename=xxxx -- privileges granted to a role
=xxxx -- privileges granted to PUBLIC
r -- SELECT ("read")
w -- UPDATE ("write")
a -- INSERT ("append")
d -- DELETE
D -- TRUNCATE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
c -- CONNECT
T -- TEMPORARY
arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
* -- grant option for preceding privilege
/yyyy -- role that granted this privilege
Pagila veritabanında \dp komutunun çıktısının bir kısmı aşağıdaki gibidir.