Giriş
PostgreSQL veritabanı yönetiminde, güvenlik en kritik unsurlardan biridir. Üretim ortamlarında, tüm bağlantıların postgres süper kullanıcısı ile yapılması büyük bir güvenlik açığıdır. Bu makalede, her uygulama ve geliştirici için özel rol (role) tanımlamayı, yetkilendirmeyi ve yönetimi öğreneceğiz.
Rol ve Kullanıcı Kavramı
PostgreSQL'de CREATE USER ve CREATE GROUP komutları, yerini modern CREATE ROLE komutuna bırakmıştır. LOGIN yetkisine sahip bir rol kullanıcı, sahip olmayan ise bir grup olarak işlev görür.
Adım 1: PostgreSQL'e Bağlanma
Tüm işlemler psql kabuğu üzerinden gerçekleştirilir. Sisteminize giriş yapmak için şu komutu kullanın:
sudo -u postgres psqlAdım 2: Rol Oluşturma
Basit bir rol oluşturmak için:
CREATE ROLE uygulama_rolu;Giriş yapabilen ve şifresi olan bir kullanıcı oluşturmak için:
CREATE USER uygulama_kullanicisi WITH PASSWORD 'guclu_sifre';Uyarı: Şifreleri asla kod depolarına (Git vb.) yüklemeyin. .env dosyalarını veya güvenli kasa (secrets manager) çözümlerini kullanın.
Adım 3: Yetkilendirme (Grant Privileges)
Veritabanı düzeyinde yetki vermek için:
GRANT CONNECT ON DATABASE veritabani_adi TO uygulama_kullanicisi;Tablo düzeyinde yetki vermek için:
GRANT SELECT, INSERT, UPDATE ON TABLE tablo_adi TO uygulama_kullanicisi;Adım 4: Gelecekteki Nesneler İçin Varsayılan Yetkiler
Yeni oluşturulan tablolara otomatik yetki atamak için ALTER DEFAULT PRIVILEGES kullanılır:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT ON TABLES TO uygulama_kullanicisi;Adım 5: Rol Silme
Bir rolü silmeden önce ona bağlı nesneleri temizlemeniz gerekir:
REASSIGN OWNED BY kullanici TO postgres;DROP OWNED BY kullanici;DROP ROLE kullanici;
Sık Karşılaşılan Sorunlar
Erişim Reddedildi Hatası: Eğer permission denied for schema public hatası alıyorsanız, GRANT USAGE ON SCHEMA public TO rol; komutunu çalıştırarak şema erişimini onaylayın.
Özet: PostgreSQL rol tabanlı erişim kontrolü (RBAC), veritabanı güvenliğinin temelidir. Her zaman 'en az ayrıcalık' (least privilege) prensibini uygulayın.



