PostgreSQL User ve Roller
PostgreSQL User ve Roller ,veritabanlarına ,objelerine bağlanabilmek için kimlik doğrulama ,yetkilendirme gibi çeşitli mekanizmalar kullanılmaktadır. Bu mekanizmaların merkezinde user kavramı yer almaktadır.
PostgreSQL e bağlanabilmek için user kavramı gereklidir. PostgreSQL bağlanmak için ilk olarak kullanıcı adı, şifre ile bağlanabilmek ve daha ayrıntılı ayarlar yapabilmek için pg_hba.conf parametrelerinde değişiklik yapmamız gerekiyor. Pg_hba.conf üzerinden gerekli değişiklikler yapıldıktan sonra bağlanabilmek için user oluşturulması gerekiyor. Bu oluşturan user ile postgresql e bağlantı yapılabilir. PostgreSQL de user ve role kavramları birbiri ile karıştırılmaktadır.
PostgreSQL de user ve roller birbiri ile aynı işlemleri yapabilmektedir fakat aynı işlemler yapılsa bile aralarında farklar bulunmaktadır. PostgreSQL’in 8.1 sürümünde rol ve user kavramları farklıydı fakat 9 versiyonundan sonra benzerlik göstermektedir.
User kavramı ile veritabanına, tablolara ,view,function kısacası bütün objelere yetki verilmektedir.
Role kavramında da veritabanına, tablolara ,view,function kısacası bütün objelere yetki verilmektedir fakat postgresql de Role oluşturulduğunda farklı bir grup oluşturularak bu grup üzerinden yetkiler verilmektedir. userdan farklı olarak bir role’e superuser tanımlayarak bir veya birden fazla kullanıcıyı bu role den faydalandırabiliriz.
Örnek verecek olursak bir schema var ve bu şema üzerinde sadece belirlenen tablolara select ,belirlenen tablolara insert işlemleri geliyor. Bunun için postgresql de iki adet role tanımlanarak birisine sadece select ,diğer oluşturulacak role sadece insert yetkisi verebiliriz. Yeni bir user ilgili tablolara select hakkı istenildiğinde o role de yetkilendirmeniz yeterli olacaktır.
Örnek olarak aşağıda faruk isminde kullanıcı oluşturulmuş ve public şemasında sadece select yetkisi olan role oluşturulmuştur .
CREATE USER faruk with login password '1';
CREATE ROLE selectpermission;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO selectpermission;
Faruk userına selectpermission role’ü için yetkilendirme yapılmıştır.
GRANT selectpermission TO faruk;
İlgili veritabanı üzerinde select çekelim.
select*from aa;
Peki faruk user’ı ile insert yapılabilecek mi kontrol edelim.
INSERT INTO public.aa(film_id) VALUES (1);
Yukarıda görüldüğü üzere erişim engellendi şeklinde hata dönmektedir.
Yukarıda oluşturulan user ve grupları listeleyelim.
İlk olarak oluşturduğumuz faruk isimli userımızı listeleyelim.
Oluşturduğumuz selectpermission adında ki role görüntüleyelim.
Role oluşturulduğunda grouplarında oluşturulduğundan bahsetmiştik . Oluşturulan role için group oluşmuş mu kontrol edelim.
NOT: PostgreSQL de oluşturulan rolelere login hakkı verildiğinde user olarak kabul edilmektedir .
PostgreSQL Cluster Bazında Yetkilendirmeler
LOGIN: Kullanıcıların bu rolü kullanarak postgresql e bağlanmasına izin verilir.
CREATE ROLE: User oluşturulma yetkisi için tanımlanır. SUPERUSER yetkilerini almak değiştirmek gibi işlemler için superuser hakkına sahip kullanıcı ile yapılması gerekmektedir.
SUPERUSER: PostgreSQL de cluster bazında bütün işlemleri yapacak yetkidir. LOGIN hakkı dışından ki bütün işlemler yapılabilir en ayrıcalıklı bir yetki olduğu için dikkatli kullanılması gerekmektedir.
CREATEDB: Yeni veritabanı oluşturmak için gerekli yetkidir.
REPLICATION: Streaming replication kullanılmak için verilen yetkidir.
PostgreSQL Database Bazında Yetkilendirmeler
SELECT: Verileri sorgulamak için tanımlanan yetkidir.
INSERT : Veri eklemek için tanımlanan yetkidir..
UPDATE : Veri güncellemek için tanımlanan yetkidir.
DELETE: Veri silmek için tanımlanan yetkidir.
TRUNCATE :Veri silmek için tanımlanan yetkidir. (Delete ile truncate arasındaki fark için delete ile truncate arasındaki farklar isimli yazımdan faydalanabilirsiniz).
REFERENCES: Referans ile ilgili işlemler için tanımlanan yetkidir.
TEMPORARY: Temp objeleri için tanımlanan yetkidir.
EXECUTE : Procedure çalıştırmak için tanımlanan yetkidir.
Konuyu pekiştirmek ve detaylı örnekler için sonraki yazılarımı takip edebilirsiniz.