Ich versuche, von pgAdmin III (das auf beiden Computern installiert ist) eine Verbindung zu einer externen Datenbank herzustellen. Der Kunde beschwert sich:
Zugriff auf Datenbank verweigert
Der Server gewährt keinen Zugriff auf die Datenbank: Der Server meldet
FATAL: no pg_hba.conf entry for host "192.168.108.161", user "postgres", database "postgres", SSL off
Um auf eine Datenbank auf einem PostgreSQL-Server zuzugreifen, müssen Sie Ihrem Client zunächst den primären Zugriff auf den Server gewähren (Host Based Authentication). PostgreSQL überprüft die
pg_hba.conf
Datei, ob ein Muster vorhanden und aktiviert ist, das Ihrer Clientadresse / Ihrem Benutzernamen / Ihrer Datenbank entspricht, bevorSQL GRANT
Zugriffssteuerungslisten ausgewertet werden.Die anfänglichen Einstellungen in pg_hba.conf sind recht restriktiv, um unerwünschte Sicherheitslücken zu vermeiden, die durch nicht überprüfte, aber obligatorische Systemeinstellungen verursacht werden. Sie werden wahrscheinlich so etwas hinzufügen wollen
host all all 192.168.0.0/24 md5
In diesem Beispiel wird allen Benutzern im privaten Netzwerk der MD5-verschlüsselte Kennwortzugriff auf alle Datenbanken gewährt
192.168.0.0/24
. Sie können denpg_hba.conf
in pgAdmin III integrierten Editor verwenden, um diepg_hba.conf
Konfigurationsdatei zu bearbeiten .Nach dem Ändern
pg_hba.conf
müssen Sie ein erneutes Ladenpg_ctl
der Serverkonfiguration auslösen, indem Sie den Serverprozess stoppen oder neu starten.
Wobei der Server ausdrücklich angibt, dass alle Verbindungen aus dem internen Netzwerk akzeptiert werden.
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 192.168.0.0/24 md5
Ich habe den Postmaster bereits neu gestartet, damit die Änderungen wirksam werden, und bin so weit gegangen, den gesamten Computer neu zu starten. Was könnte hier noch schief gehen?
quelle
/
war , wie viele Bits festgelegt wurden --- das macht viel mehr Sinn , jetzt!192.168.108.161/32
oder einfach192.168.108.161
?192.168.108.161/32
. Nehmen Sie sich auch die Zeit, um den Anfang derpg_hba.conf
Datei über die Spalte ADRESSE zu lesen. Alles wird erklärt.Zwei Dinge fallen mir ein.
Der erste besteht darin, sicherzustellen, dass der Server die Netzwerkschnittstelle überwacht. Standardmäßig hört es nur auf dem lokalen Host. Bearbeiten Sie Ihre
postgresql.conf
Datei und ändern Sie:Um stattdessen so auszusehen:
Wenn Sie eine Remoteverbindung herstellen,
postgres
benötigt Ihr Benutzer ein Kennwort. Standardmäßig ist diesem Konto kein Kennwort zugeordnet, sodass nur die lokale vertrauenswürdige Anmeldung funktioniert. Damit die Remote-Kennwortanmeldung (z. B.md5
in pg_hba.conf`) funktioniert, fügen Sie entweder ein Kennwort hinzu oder erstellen Sie einen neuen Benutzer mit einem Kennwort.Anstatt
host
inpg_hba.conf
Verwendunghostssl
zu verwenden, müssen Remoteverbindungen SSL verwenden. Andernfalls werden die Anmeldeinformationen für Benutzername / Passwort im Klartext über die Leitung gesendet.quelle
listen_addresses
habe, aber es wird für zukünftige Benutzer hilfreich sein, dies auch zu sehen. 2) Auf dem Server kann ich pgAdmin öffnen und dann eine Verbindung zur Datenbank herstellen. Es fordert mich zur Eingabe eines Passworts auf, ich gebe eines ein (unsere Firma hat ein Standardpasswort, das wir für Testzwecke verwenden) und es verbindet sich. Würde es nicht ähnlich scheitern, wenn derpostgres
Benutzer kein Passwort hätte?psql
und prüfen Sie, welcher Fehler gemeldet wird. Es sollte ausführlich genug sein, um die Ursache herauszufinden. Wenn es heißt,FATAL: password authentication failed for user
ist es wahrscheinlich ein nicht übereinstimmendes Passwort. Wenn es heißt, handeltcould not connect to server: Connection refused
es sich wahrscheinlich um ein Netzwerk- / Portproblem. Ist die von Ihnen angegebene CIDR192.168.0.0/24
korrekt? Sollte das sein192.168.1.0/24
(1
statt0
für das dritte Byte)?psql --host=192.168.108.160 --port=5433 --user=postgres postgres
schlägt mit dem gleichen Fehler fehl (und keine Möglichkeit, es ausführlicher zu machen): "FATAL: kein pg_hba.conf-Eintrag für Host ..."psql
dann. Wie hat sich pgAdmin dann lokal verbunden? Ich vermute, Sie haben eine Verbindung zu einer anderen Datenbank hergestellt. Andernfalls kann ich auch nicht sehen, wie eine lokale Verbindung funktionieren würde, wenn der Server nicht gestartet wird.