Selamlar,
PostgreSQL 18 (25 Eylül 2025) ile birlikte OAuth 2.0 kimlik doğrulama desteği geldi; asenkron I/O ve bir sürü performans iyileştirmesiyle birlikte güvenlik tarafında da bakılacak maddeler arttı. Bu konuda "yeni kurduğum Postgres'i nasıl sıkılaştırırım?" diyenler için temel bir kontrol listesi bırakıyorum.
Konuda Anlatılacaklar
- PostgreSQL 18'den güvenlikle ilgili notlar
- Rol ve yetki: süperuser alışkanlığını kırmak
- pg_hba.conf: SCRAM, md5'in düşüşü
- OAuth 2.0 (özet)
- Lab'da hızlı sıkılaştırma listesi
1) PG 18 Güvenlik Notları
Resmi duyuruya göre:
- oauth kimlik doğrulama yöntemi: SSO entegrasyonu için (uzantı destekli)
- md5 parola doğrulama deprecated; parola kullanacaksanız SCRAM
- ssl_tls13_ciphers ile TLS 1.3 cipher kontrolü
- Yeni kümelerde sayfa checksum'ları varsayılan açık (pg_upgrade senaryolarına dikkat)
2) Rol Disiplini
-- uygulama kullanıcısı: süperuser DEĞİL
CREATE ROLE app_user LOGIN PASSWORD 'uzun-ve-rastgele';
CREATE DATABASE appdb OWNER app_user;
\c appdb
-- şema ve tablo yetkilerini bilinçli verin
GRANT CONNECT ON DATABASE appdb TO app_user;
GRANT USAGE ON SCHEMA app TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app TO app_user;Yedekleme için ayrı bir rol (REPLICATION veya pg_dump yetkisi), izleme için salt okunur rol. Hepsi postgres süperuser ile bağlanmasın.
3) pg_hba.conf
# Örnek: sadece localhost, SCRAM
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
# Uzaktan erişim gerekiyorsa: VPN CIDR + scram + TLS zorunlureject satırlarıyla istenmeyen ağları erken kesin. Docker lab'ında bile 0.0.0.0/0 + trust kombinasyonundan kaçının.
4) OAuth 2.0 (Özet)
PG 18, oauth yöntemini pg_hba içinde kullanmanıza izin veriyor; asıl doğrulama bir validator kütüphanesi / IdP entegrasyonu ile yapılıyor. Kurumsal SSO (Entra ID, Keycloak vb.) planlıyorsanız resmi dokümantasyondaki "OAuth Support" bölümüne bakın. Lab'da şart değil; production'da parola paylaşımını azaltır.
5) Hızlı Lab Checklist
- listen_addresses'i ihtiyaca göre daraltın
- password_encryption = scram-sha-256
- ssl = on (lab'da self-signed bile olsa alışkanlık)
- Süperuser uzaktan kapalı
- Düzenli pg_dump + checksum doğrulama
Kaynaklar
Alıntı:Lab ve kendi sunucularınız için. Başkasının veritabanına izinsiz erişim suçtur.
Kapak: özgün TurkTeam görseli.