Das Problem
Postgres wird möglicherweise IPv6 verwenden bei Angabe von -h localhost
was angesichts des obigen pg_hba.conf
gibt ident
an , wird eine Passwortabfrage zurückgegeben.
Wenn jedoch -h 127.0.0.1
angegeben ist, wird Postgres gezwungen, IPv4 zu verwenden , die auf trust
gesetzt ist in der obigen Konfiguration und ermöglicht den Zugriff ohne Passwort.
Die Antwort
Daher ist die Antwort, die IPv6-Host-Zeile in pg_hba.conf
zu ändern um trust
zu verwenden :
# IPv6 local connections:
host all all ::1/128 trust
Denken Sie daran, den Postgres-Dienst neu zu starten, nachdem Sie Konfigurationsänderungen vorgenommen haben.
In pg_hba.conf die erste Übereinstimmung zählt. Das Handbuch:
Der erste Datensatz mit übereinstimmendem Verbindungstyp, Client-Adresse, angeforderter Datenbank und Benutzername wird zur Durchführung der Authentifizierung verwendet. Es gibt kein „Fall-Through“ oder „Backup“:Wenn ein Datensatz ausgewählt wird und die Authentifizierung fehlschlägt, gilt dies für nachfolgende Datensätze nicht betrachtet. Wenn kein Datensatz übereinstimmt, wird der Zugriff verweigert.
Beachten Sie die umgekehrte Reihenfolge :
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 ident
Aber:
host all all localhost ident
host all all localhost trust
Denken Sie daran, neu zu laden nach dem Speichern der Änderungen an pg_hba.conf
. (Neustart ist nicht erforderlich.) Das Handbuch:
Die pg_hba.conf
Datei wird beim Start gelesen und wenn der Hauptserverprozess einen SIGHUP
empfängt Signal. Wenn Sie die Datei auf einem aktiven System bearbeiten, müssen Sie dies dem Postmaster mitteilen (mit pg_ctl reload
, Aufruf der SQL-Funktion pg_reload_conf()
, oder mit kill -HUP
), damit die Datei erneut gelesen wird.
Wenn Sie die Zeilen wirklich so "hinzufügen", wie Sie es geschrieben haben, sollte es überhaupt keinen Effekt geben. Aber wenn Sie ersetzen die Zeilen gibt es.
Im ersten Fall erhalten Sie trust
Authentifizierungsmethode, die eine Politik der offenen Tür ist. Das Handbuch:
PostgreSQL geht davon aus, dass jeder, der sich mit dem Server verbinden kann, berechtigt ist, auf die Datenbank mit dem von ihm angegebenen Datenbank-Benutzernamen zuzugreifen (sogar Superuser-Namen)
Aber im zweiten Fall erhalten Sie den ident
Authentifizierungsmethode, die ordnungsgemäß eingerichtet werden muss, damit sie funktioniert.
Plus, wie Cas später betonte, localhost
deckt sowohl IPv4 als auch IPv6 ab, während 127.0.0.1/32
gilt nur für IPv4.
Wenn Sie tatsächlich die veraltete Version 8.4 verwenden, gehen Sie zum alten Handbuch für 8.4. Sie wissen, dass 8.4 2014 das EOL erreicht hat und nicht mehr unterstützt wird? Erwägen Sie ein Upgrade auf eine aktuelle Version.
In Postgres 9.1 oder höher verwenden Sie lieber peer
als ident
.
Mehr:
- Batchdatei mit psql-Befehl ohne Passwort ausführen