GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Postgres lässt localhost nicht zu, funktioniert aber mit 127.0.0.1

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

Linux
  1. Kann ein Skript ausführbar, aber nicht lesbar sein?

  2. Bashscript funktioniert vom Terminal, aber nicht von Crontab?

  3. Betrieb wird mit Setfacl nicht unterstützt?

  4. Bild herunterladen Funktioniert in Firefox, aber nicht in Internet Explorer

  5. Der Befehl „ntpq -pn“ gibt den Fehler „Name oder Dienst nicht bekannt“ zurück

Was ist 127.0.0.1 Localhost?

Was ist Localhost?

Pycharm tensorflow ImportError funktioniert aber gut mit Terminal

Kann über LAN ping/ssh, aber nicht mit Wi-Fi

Kann ich 127.0.0.1 blind vertrauen?

Kann keine Verbindung zu MySQL mit „localhost“ herstellen, aber mit „127.0.0.1“ ist es in Ordnung?