PostgreSQL "no pg_hba.conf entry for host" — Kural Var, Neden Reddediliyor?
pg_hba.conf'un ilk eşleşen satırı uygulaması, pg_hba_file_rules ile kuralları denetleme, hostssl farkı ve yükleme adımı.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
FATAL: no pg_hba.conf entry for host "10.0.2.15", user "app", database "app", no encryption
FATAL: no pg_hba.conf entry for host "10.0.2.15", user "app", database "app", SSL offSQLSTATE kodu: 28000 (invalid_authorization_specification).
Hatanın sonundaki ibare (SSL off, no encryption veya SSL on) istemcinin bağlantıyı TLS ile mi yoksa düz metin (plaintext) mi kurmaya çalıştığını gösterir.
Bu hata veritabanı yöneticilerinin karşısına genellikle *"Ama ben pg_hba.conf dosyasına kuralı ekledim, neden hâlâ reddediyor?"* sorusuyla gelir.
pg_hba.conf güvenlik dosyasında güvenlik duvarlarındaki gibi "en dar veya en özel kural kazanır" mantığı yoktur. PostgreSQL dosyayı yukarıdan aşağıya satır satır okur ve uyan İLK kuralı seçer.
Eğer dosyanın üst sıralarında genel bir kural varsa (host all all 0.0.0.0/0 reject veya hostssl all all ...), altına yazdığınız özel host app app 10.0.2.15/32 kuralı asla çalışmaz! İlk eşleşen satır sonraki tüm satırları gölgeler.▸Kural Dosyasını Denetlemenin En Güvenilir Yolu
Dosyayı işletim sistemi editörleriyle elle okumak yerine PostgreSQL motorunun bu dosyayı nasıl ayrıştırdığını yerleşik görünümden sorgulayın:
SELECT line_number, type, database, user_name, address, netmask,
auth_method, error
FROM pg_hba_file_rules
ORDER BY line_number;Bu görünüm üç kritik avantaj sağlar:
- 1Kuralların PostgreSQL gözündeki gerçek değerlendirme sırasını gösterir.
- 2`error` sütunu: Eğer satırda sözdizimi (syntax) hatası varsa PostgreSQL o satırı sessizce atlar; hatayı bu sütunda açıkça görürsünüz.
- 3Hangi dosyanın geçerli olduğunu doğrulamak için:
SHOW hba_file;
SHOW listen_addresses;
SHOW port;Birden fazla PGDATA veya PostgreSQL kümesi olan sunucularda, yanlış pg_hba.conf dosyasını düzenleyip sunucuyu reload etmek en sık yapılan ikinci hatadır.
▸`host` vs `hostssl` vs `hostnossl` Ayrımı
- •`host`: Hem TLS (şifreli) hem de şifresiz düz TCP bağlantılarını kabul eder.
- •`hostssl`: SADECE TLS/SSL ile kurulan bağlantıları kabul eder. Eğer istemciniz bağlantı dizgisinde SSL açmadıysa (
sslmode=disable), bu kural eşleşmez ve logdano pg_hba.conf entry ... SSL offhatası basılır. - •`hostnossl`: SADECE şifresiz bağlantıları kabul eder; TLS kullanan istemciler bu kuralı geçemez.
▸Adım Adım Kalıcı Çözüm
1. Kuralı Doğru Konuma ve Dar Kapsamla Yazın
Dosyanın en üstüne yakın, spesifik bir kural ekleyin:
# TYPE DATABASE USER ADDRESS METHOD
hostssl app app 10.0.2.0/24 scram-sha-256md5 kimlik doğrulama yöntemini kullanmayın; modern ortamlarda brute-force saldırılarına dayanıklı olan `scram-sha-256` standardını tercih edin.2. Konfigürasyonu Sıfır Kesintiyle Yeniden Yükleyin
pg_hba.conf değişiklikleri için PostgreSQL servisini yeniden başlatmaya (restart) gerek yoktur! Çalışan açık oturumları kesmeden ayarları anında geçerli kılmak için:
SELECT pg_reload_conf();Veya Linux kabuğundan:
pg_ctl reload -D /var/lib/postgresql/data
# veya
systemctl reload postgresql3. listen_addresses Parametresini Doğrulayın
Eğer pg_hba.conf kuralınız doğru olduğu halde bağlantı reddediliyorsa, postgresql.conf dosyasında sunucunun dış ağ kartını dinleyip dinlemediğini kontrol edin:
listen_addresses = '*'listen_addresses = 'localhost' ise PostgreSQL dış IP'lerden gelen paketleri işletim sistemi soket düzeyinde doğrudan reddeder (H-07).
▸İlgili Hata Rehberleri & Hub Bağlantıları
- •PostgreSQL Password Authentication Failed (H-02) — Parola doğrulama hataları
- •PostgreSQL Connection Refused (H-07) — Soket ve port erişim engelleri
- •PostgreSQL Terminating Connection (H-31) — Oturum sonlandırma nedenleri
- •PostgreSQL Hub — Ağ güvenliği ve kimlik doğrulama rehberleri
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL Bağlantı Tükenmesi ve too many clients Teşhisi
FATAL: sorry, too many clients already ve remaining connection slots hatalarının üç temel kök nedeni, yetki sınırlarıyla salt okunur pg_stat_activity teşhisi ve kalıcı iki katmanlı havuzlama çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
PostgreSQL connection refused: 8 Adımda Kesin Teşhis
Connection refused, timeout ve "no pg_hba.conf entry" arasındaki fark; listen_addresses, port, firewall ve Docker port yayınlama kontrolleri.