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
| Özellik | Açıklama |
|---|---|
| LOGIN / NOLOGIN | Giriş yapabilir mi? |
| SUPERUSER | Süper yönetici mi? |
| CREATEDB | Veritabanı oluşturabilir mi? |
| CREATEROLE | Rol oluşturabilir mi? |
| REPLICATION | Replikasyon yapabilir mi? |
| CONNECTION LIMIT | Max bağlantı sayısı |
| VALID UNTIL | Son 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_%';