So sieht die Meldung aus
psql: error: connection to server at "db.example.com" (203.0.113.20), port 5432 failed: FATAL: no pg_hba.conf entry for host "198.51.100.7", user "appuser", database "appdb", SSL encryptionHäufige Ursachen
- Für die Client-Adresse gibt es keine
host-Zeile, oder der Adressbereich ist zu eng oder falsch geschrieben. - Benutzer oder Datenbank passen nicht zur Zeile, z. B. gilt die Zeile für
allBenutzer, aber eine andere Datenbank. - Der Client nutzt SSL, die Zeile ist aber
hostnossl, oder umgekehrt beihostssl. - Die Datei wurde geändert, PostgreSQL aber nicht neu geladen.
- Der Client kommt von einer anderen Adresse als erwartet, z. B. ein Docker-Netz, ein NAT oder ein Proxy.
Prüfen
- Welche Regeln nutzt der Server wirklich, der Reihe nach? Zeigt auch Fehler in der Datei
sudo -u postgres psql -c 'SELECT line_number, type, database, user_name, address, auth_method, error FROM pg_hba_file_rules' - Auf welchen Adressen lauscht der Server?
sudo -u postgres psql -c 'SHOW listen_addresses' - Ist der Port auf dem Server offen?
sudo ss -tlnp | grep 5432 - Die Adresse, die der Server gesehen hat: steht im Fehlertext. Auch im Log
sudo tail -n 20 /var/log/postgresql/postgresql-*-main.log
Lösung
- Adresse, Benutzer, Datenbank und SSL-Modus aus dem Fehlertext übernehmen. Das ist genau das, was der Server gesehen hat.
- Eine enge Zeile in
pg_hba.confergänzen, z. B.hostssl appdb appuser 198.51.100.7/32 scram-sha-256. Die echte Client-Adresse oder einen kleinen Bereich verwenden. - Neu laden:
sudo systemctl reload postgresql, danach die Regelliste erneut prüfen. - Nutze nicht
0.0.0.0/0mittrust. Das lässt jeden im Netz ohne Passwort hinein. - Ist der Server gar nicht erreichbar (connection refused), sind
listen_addressesoder die Firewall die nächste Stelle.
Häufige Fragen
Muss ich PostgreSQL neu starten?
Nein. Für die pg_hba.conf genügt ein Reload: systemctl reload postgresql oder SELECT pg_reload_conf();.
Die Client-Adresse im Fehler ist nicht meine.
Dann ändert ein Proxy, ein NAT oder die Docker-Bridge die Quelladresse. Schreibe die Regel für die Adresse, die der Server meldet, oder korrigiere den Netzwerkweg.