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.

 

Loading