Linux Ubuntu PostgreSQL Kullanıcı ve Veritabanı Oluşturma

18 May

Bu yazıda, Linux Ubuntu komut satırı kullanılarak PostgreSQL’de veritabanlarının nasıl oluşturulacağı ve kullanıcıların nasıl ekleneceği veya nasıl silineceği açıklanmaktadır.

Kullanıcı Oluşturma İşlemi

Her PostgresSQL kurulumunda, postgres adında bir süper kullanıcı oluşturulur. Başlangıçta, başka kullanıcılar oluşturulana kadar PostgreSQL’e postgres kullanıcısı olarak bağlanmanız gerekir.

sudo su postgres

Bu komut ile giriş yaptıktan sonra PostgreSQL süper kullanıcısı olarak işlemler yapılabilir.

Yeni bir kullanıcı oluşturmak için gerekli bir sürü parametre bulunmaktadır. Parametrelerin tam listesine buradan ulaşabilirsiniz. Ancak –interactive ve –pwprompt parametrelerini kullanarak, işlem adımlarını konsoldan size sormasını sağlayarak ilerleyebiliriz.

createuser --interactive --pwprompt

Bu şekilde, adımlarda sorulan bilgileri girerek ilerleyebilirsiniz. Artık administrator adında yeni bir kullanıcı oluşturulmuştur.

Kullanıcıları listelemek için psql komutunu ile PostgreSQL terminaline giriş yaparak \du komutu ile kullanıcıları görebilirsiniz. (psql komutu girildiğinde terminal satırı postgres=# şeklinde görüntülenecektir.)

Şu anda sistemde sadece iki kullanıcı mevcuttur.

Veritabanı Oluşturma İşlemi

PostgreSQL’de yeni bir veri tabanı oluşturmak için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır. Şu an sistemde administrator ve postgres kullanıcıları bu yetkilere sahiptir.

sudo su postgres

Komutu ile giriş yaptıktan sonra veritanbanı oluşturma komutu olan ceratedb komutu çalıştırılır.

createdb -O administrator mydb

Artık mydb adında yeni bir veritabanı oluşturulmuştur. psql komutunu girerek \l komutu ile tüm veritabanları listelenebilir.

Veritabanına Kullanıcı Ekelme İşlemi

Bir kullanıcının, bir veritabanı üzerinde işlem yapabilmesi için, ilgili işlem adına yetkilendirilmesi gerekmektedir.

bucuncu adında bir kullanıcı oluşturalım:

createuser --interactive --pwprompt

bucuncu kullanıcısına, mydb veritabanı bağlantı yetkisi verelim:

GRANT connect ON DATABASE mydb TO bucuncu;

Veritabanı Silme İşlemi

PostgreSQL’de yeni bir veri tabanı silmek için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropdb komutu ile veritabanı silinebilir.

dropdb mydb

Artık mydb veritabanı sistemden silinmiştir.

Kullanıcı Silme İşlemi

PostgreSQL’de bir veri tabanını silmek için, yine postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropuser komutu ile kullanıcı sistemden silinebilir.

dropuser administrator

Not: Kullanıcı herhangi bir veritabanına veya başka bir nesneye sahipse, kullanıcıyı silemezsiniz. Silmek istediğinizde aşağıdaki gibi bir hata oluşur:

dropuser: removal of role "username" failed: 
ERROR:  role "username" cannot be dropped because some 
objects depend on it
DETAIL:  owner of database "database"

Kullanıcıyı silebilmek için sahip, veritabanı sahibini değiştirmelisiniz.

SQL Komutlarıyla Kullanıcı Oluşturma İşlemi

PostgreSQL veri tabanında ROLE kavramı hem bireysel bir kullanıcıyı, hem de bir kullanıcı grubunu ifade etmektedir. Eğer kullanıcıya LOGIN özelliği eklenirse, kullanıcı veri tabanına bağlantı sağlayabilir. İki adımda, kullanıcı gurubu ve bireysel kullanıcı oluşturmayı inceleyebiliriz.

Bir kullanıcı grubu oluşturmak gerekli komut:

CREATE ROLE gis_editor;

Veri tabanına bağlanabilen bireysel bir kullanıcı oluşturmak için gerekli komut:

CREATE ROLE bayram WITH PASSWORD '123456' LOGIN INHERIT;

Artık “bayram” kullanıcısı veri tabanına “123456” şifresi ile bağlanabilir. INHERIT özelliği ile kullanıcı, bağlı olduğu grubun özelliklerini alabilir hale getirilmiştir. Çünkü, tablolara erişme gibi yetkiler “gis_editor” grubuna verilecektir. Dolayısıyla bu gruba dahil olan bireysel kullanıcılar da aynı yetkilere sahip olacaktır.

Bir kullanıcıyı bir role atamak için gerekli komut:

GRANT gis_editor TO bayram;

Artık “bayram” kullanıcısı “gis_editor” rolünün yetkilerine sahiptir.

Bir şemada “gis_editor” rolüne yetki verildiğinde, artık o yetki INHERIT pozisyonundaki alt kullanıcılara da geçer. Örneğin.

GRANT USAGE on schema my_schema TO gis_editor;

Bir şemadaki tüm tablolara veya sequence nesnelerine yetki vermek için gerekli komutlar:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema TO gis_editor
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema TO gis_editor

PostgreSQL yetkileri ile ilgili daha detaylı bilgiye PostgreSQL GRANT, REVOKE başlıklı yazıdan ulaşabilirsiniz.