Kullanıcı ve Rol Yönetimi

Kullanıcı oluşturma, roller ve yetkilendirme

Kullanıcı vs Rol

PostgreSQL'de USER ve ROLE aynı şeydir. Tek fark: USER varsayılan olarak LOGIN yetkisine sahiptir.

Kullanıcı Oluşturma

SQL ile

-- Basit kullanıcı
CREATE USER appuser WITH PASSWORD 'güçlü_şifre_123!';

-- Detaylı
CREATE ROLE appuser WITH
    LOGIN
    PASSWORD 'güçlü_şifre_123!'
    CREATEDB
    VALID UNTIL '2025-12-31';

Komut Satırından

sudo -u postgres createuser --interactive --pwprompt appuser

Kullanıcı Özellikleri

ÖzellikAçıklama
LOGIN / NOLOGINGiriş yapabilir mi?
SUPERUSERSüper yönetici mi?
CREATEDBVeritabanı oluşturabilir mi?
CREATEROLERol oluşturabilir mi?
REPLICATIONReplikasyon yapabilir mi?
CONNECTION LIMITMax bağlantı sayısı
VALID UNTILSon kullanma tarihi

Kullanıcı Değiştirme

-- Şifre değiştir
ALTER USER appuser WITH PASSWORD 'yeni_şifre';

-- Yetki ekle
ALTER USER appuser CREATEDB;

-- Yetki kaldır
ALTER USER appuser NOCREATEDB;

-- Süper yönetici yap
ALTER USER appuser SUPERUSER;

Kullanıcı Silme

-- Önce sahip olduğu nesneleri devret
REASSIGN OWNED BY appuser TO postgres;

-- Sonra sil
DROP ROLE appuser;

Yetkilendirme (GRANT)

Veritabanı Yetkileri

-- Tam yetki
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;

-- Sadece bağlantı
GRANT CONNECT ON DATABASE myapp TO appuser;

Schema Yetkileri

GRANT USAGE ON SCHEMA public TO appuser;
GRANT CREATE ON SCHEMA public TO appuser;

Tablo Yetkileri

-- Tek tablo
GRANT SELECT, INSERT, UPDATE, DELETE ON users TO appuser;

-- Tüm tablolar
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

-- Gelecekteki tablolar için
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;

Kullanıcıları Listeleme

-- psql komutu
\du

-- SQL ile
SELECT 
    rolname,
    rolsuper,
    rolcreatedb,
    rolcanlogin
FROM pg_roles
WHERE rolname NOT LIKE 'pg_%';