it-swarm.com.de

psql: FATAL: Ident-Authentifizierung für Benutzer "postgres" fehlgeschlagen

Ich habe PostgreSQL und pgAdminIII auf meiner Ubuntu Karmic-Box installiert.

Ich kann pgAdminIII erfolgreich verwenden (d. H. Verbinden/anmelden). Wenn ich jedoch versuche, mich mit demselben Benutzernamen/pwd in der Befehlszeile (unter Verwendung von psql) beim Server anzumelden, wird die folgende Fehlermeldung angezeigt:

psql: FATAL:  Ident authentication failed for user "postgres"

Kennt jemand jetzt, wie man dieses Problem löst?

355
morpheous

Hast du die richtigen Einstellungen in der pg_hba.conf vorgenommen?

Siehe https://help.ubuntu.com/stable/serverguide/postgresql.html wie es geht.

186
Frank Heikens

Die folgenden Schritte funktionieren für eine Neuinstallation von postgres 9.1 unter Ubuntu 12.04. (Funktioniert auch für Postgres 9.3.9 unter Ubuntu 14.04.)

Standardmäßig erstellt postgres einen Benutzer mit dem Namen 'postgres'. Wir melden uns als sie an und geben ihr ein Passwort.

$ Sudo -u postgres psql
\password
Enter password: ...
...

Melden Sie sich von psql ab, indem Sie \q oder ctrl+d eingeben. Dann verbinden wir uns als 'postgres'. Der Teil -h localhostist wichtig: Er teilt dem Client psql mit, dass eine Verbindung über eine TCP -Verbindung hergestellt werden soll (die für die Verwendung der Kennwortauthentifizierung konfiguriert ist). , und nicht durch eine PEER-Verbindung (die sich nicht um das Passwort kümmert).

$ psql -U postgres -h localhost
401
Manav

Bearbeiten Sie die Datei /etc/postgresql/8.4/main/pg_hba.conf und ersetzen Sie ident oder peer durch md5 oder trust, je nachdem, ob auf Ihrem eigenen Computer ein Kennwort abgefragt werden soll oder nicht. Laden Sie dann die Konfigurationsdatei neu mit:

/etc/init.d/postgresql reload
154

Diese Fehlermeldung wird angezeigt, weil die Clientauthentifizierung fehlschlägt. Basierend auf der Fehlermeldung haben Sie wahrscheinlich die Standard-Postgres-Konfiguration, die die Client-Authentifizierungsmethode für alle PostgreSQL-Verbindungen auf "IDENT" setzt.

Lesen Sie unbedingt den Abschnitt 19.1 Client-Authentifizierung im PostgreSQL-Handbuch , um die verfügbaren Authentifizierungseinstellungen (für jeden Datensatz in) besser zu verstehen pg_hba.conf ), aber hier ist das relevante Snippet, um bei Ihrem Problem zu helfen (aus dem Version 9.5 Handbuch ):

Vertrauen

Lassen Sie die Verbindung unbedingt zu. Mit dieser Methode kann sich jeder, der eine Verbindung zum PostgreSQL-Datenbankserver herstellen kann, als beliebiger PostgreSQL-Benutzer anmelden, ohne dass ein Kennwort oder eine andere Authentifizierung erforderlich ist. Einzelheiten finden Sie in Abschnitt 19.3.1.

ablehnen

Die Verbindung unbedingt ablehnen. Dies ist nützlich, um bestimmte Hosts aus einer Gruppe herauszufiltern. Beispielsweise kann eine Ablehnungsleitung die Verbindung eines bestimmten Hosts verhindern, während eine spätere Leitung den verbleibenden Hosts in einem bestimmten Netzwerk die Verbindung ermöglicht.

md5

Fordern Sie den Client auf, ein Kennwort mit doppeltem MD5-Hash für die Authentifizierung anzugeben. Einzelheiten finden Sie in Abschnitt 19.3.2.

Passwort

Fordern Sie den Client auf, ein unverschlüsseltes Kennwort für die Authentifizierung anzugeben. Da das Kennwort im Klartext über das Netzwerk gesendet wird, sollte dies nicht in nicht vertrauenswürdigen Netzwerken verwendet werden. Einzelheiten finden Sie in Abschnitt 19.3.2.

gss

Verwenden Sie GSSAPI, um den Benutzer zu authentifizieren. Dies ist nur für TCP/IP-Verbindungen verfügbar. Siehe Abschnitt 19.3.3 für Details.

sspi

Verwenden Sie SSPI, um den Benutzer zu authentifizieren. Dies ist nur unter Windows verfügbar. Siehe Abschnitt 19.3.4 für Details.

ident

Ermitteln Sie den Betriebssystembenutzernamen des Clients, indem Sie sich an den Ident-Server auf dem Client wenden, und überprüfen Sie, ob er mit dem angeforderten Datenbankbenutzernamen übereinstimmt. Die Ident-Authentifizierung kann nur für TCP/IP-Verbindungen verwendet werden. Wenn für lokale Verbindungen festgelegt, wird stattdessen die Peer-Authentifizierung verwendet. Siehe Abschnitt 19.3.5 für Details.

Peer

Rufen Sie den Betriebssystembenutzernamen des Clients vom Betriebssystem ab und überprüfen Sie, ob er mit dem angeforderten Datenbankbenutzernamen übereinstimmt. Dies ist nur für lokale Verbindungen verfügbar. Siehe Abschnitt 19.3.6 für Details.

ldap

Authentifizieren Sie sich mit einem LDAP-Server. Siehe Abschnitt 19.3.7 für Details.

Radius

Authentifizieren Sie sich mit einem RADIUS Server. Einzelheiten finden Sie in Abschnitt 19.3.8.

cert

Authentifizieren Sie sich mit SSL-Client-Zertifikaten. Siehe Abschnitt 19.3.9 für Details.

pam

Authentifizieren Sie sich mit dem vom Betriebssystem bereitgestellten PAM-Dienst (Pluggable Authentication Modules). Siehe Abschnitt 19.3.10 für Details.

Um das aufgetretene Problem zu lösen, haben Sie folgende Möglichkeiten:

  1. Ändern Sie die in Ihrer pg_hba.conf -Datei definierten Authentifizierungsmethoden in trust, md5 oder password (je nach Ihren Sicherheits- und Einfachheitsanforderungen) für die lokalen Verbindungsaufzeichnungen dort definiert haben.

  2. Aktualisieren Sie pg_ident.conf, um die Benutzer Ihres Betriebssystems den PostgreSQL-Benutzern zuzuordnen, und gewähren Sie ihnen die entsprechenden Zugriffsrechte, je nach Ihren Anforderungen.

  3. Lassen Sie die IDENT-Einstellungen unverändert und erstellen Sie Benutzer in Ihrer Datenbank für jeden Betriebssystembenutzer, auf den Sie Zugriff gewähren möchten. Wenn ein Benutzer bereits vom Betriebssystem authentifiziert und angemeldet ist, benötigt PostgreSQL keine weitere Authentifizierung und gewährt diesem Benutzer Zugriff auf der Grundlage der ihm in der Datenbank zugewiesenen Berechtigungen (Rollen). Dies ist die Standardkonfiguration.

Hinweis: Die Position von pg_hba.conf und pg_ident.conf ist vom Betriebssystem abhängig.

83
Haig Bedrosian

Das einfache Hinzufügen des Bits -h localhost war alles, was ich brauchte, um zu funktionieren

44
boulder_ruby

Sie können die Umgebungsvariable PGHOST=localhost einstellen:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:
14
Ivan Trechyokas

Falls keine der oben genannten Lösungen für Sie funktioniert:

Ich habe einige Postgres-Installationen durchgeführt, war aber heute auf einem RedHat 6.5-System (Installation von Postgres 9.3) überfordert. Meine typische hba.conf-Konfiguration, die Aron oben zeigt, hat nicht funktioniert. Es stellte sich heraus, dass mein System IPV6 verwendete und die IPV4-Konfiguration ignorierte. Hinzufügen der Zeile:

Host    all             all             ::1/128                 password

erlaubte mir, mich erfolgreich anzumelden.

13
Ethan Brown

Von all den obigen Antworten hat nichts für mich funktioniert. Ich musste das Benutzerpasswort in der Datenbank manuell ändern und es funktionierte plötzlich.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Ich habe folgende Einstellungen vorgenommen:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
Host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
Host    all             all             ::1/128                 password

Die Verbindung ist schließlich für den folgenden Befehl erfolgreich:

psql -U produser -d dbname -h localhost -W 
11
Joseph Persie

Ich stellte fest, dass ich einen Identitätsserver installieren musste, der Port 113 überwacht.

Sudo apt-get install pidentd
Sudo service postgresql restart

Und dann hat es geklappt.

10
Dustin Kirkland

Hmmm ...

Wenn Sie in pgAdminIII eine Verbindung mit dem Benutzernamen und dem Kennwort herstellen können, aber keine Verbindung mit psql herstellen können, stellen diese beiden Programme wahrscheinlich eine andere Verbindung zur Datenbank her.

[Wenn Sie eine Verbindung zu verschiedenen Datenbanken herstellen, versuchen Sie zunächst, eine Verbindung zu derselben Datenbank herzustellen. Siehe unten.]

From PostgreSQL: Documentation: 9.3: psql :

Wenn Sie den Hostnamen weglassen, stellt psql über einen Unix-Domain-Socket eine Verbindung zu einem Server auf dem lokalen Host her oder über TCP/IP zu localhost auf Computern, die keine Unix-Domain-Sockets haben.

Wenn Sie nicht so etwas wie psql ... -h Host_name ... ausführen und Ubuntu ausführen, sollte psql eine Verbindung über einen Unix-Domain-Socket herstellen, sodass PostgreSQL wahrscheinlich nicht für die Kennwortauthentifizierung konfiguriert ist Methoden für den Benutzer postgres .

Sie können dies testen, indem Sie Folgendes ausführen:

Sudo -u postgres psql

Wenn das oben genannte funktioniert, ist Ihr Server wahrscheinlich so konfiguriert, dass er Peer -Authentifizierung für lokale Verbindungen durch den Postgres -Benutzer verwendet, dh das Betriebssystem fragt Damit Ihr Benutzername bestätigt, dass Sie Postgres sind.

Es ist also wahrscheinlich Ihre pg_hba.conf Datei

Der vollständige Pfad der Datei lautet: like/etc/postgresql/9.3/main/pg_hba.conf . Sie können es anzeigen, indem Sie z. Sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Wenn Sie den Hostnamen in Ihrem Befehl psql weglassen, sollten Sie eine Verbindung herstellen können, wenn Sie der Datei pg_hba.conf den folgenden Eintrag hinzufügen:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[Kommentierte Zeilen in der Datei pg_hba.conf beginnen mit #.]

Wenn Sie are einschließlich des Hostnamens in Ihrem psql -Befehl angeben, fügen Sie stattdessen diesen Eintrag hinzu:

# Connection type   Database   User       IP addresses   Method
Host                all        postgres   127.0.0.1/32   md5

Sie müssen den Eintrag setzen, bevor andere Einträge für Ihre Verbindung über psql abgeglichen werden. Wenn Sie sich nicht sicher sind, wo Sie es platzieren sollen, stellen Sie es einfach vor die erste nicht kommentierte Zeile.

Mehr über pg_hba.conf

From PostgreSQL: Documentation: 9.3: Die Datei pg_hba.conf [Fettdruck]:

Der erste Datensatz mit einem übereinstimmenden Verbindungstyp, Clientadresse, angeforderte Datenbank und Benutzername wird für die Ausführung verwendet Authentifizierung. Es gibt kein "Fall-through" oder "Backup": Wenn ein Datensatz ausgewählt wird und die Authentifizierung fehlschlägt, werden nachfolgende Datensätze nicht berücksichtigt. Wenn kein Datensatz übereinstimmt, wird der Zugriff verweigert.

Beachten Sie, dass die Datensätze bei der Authentifizierungsmethode nicht ​​abgeglichen werden. Also, wenn Ihre pg_hba.conf Datei den folgenden Eintrag enthält:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Dann können Sie nicht ​​eine Verbindung herstellen über:

psql -u postgres

Es sei denn, einer dieser Einträge befindet sich in Ihrer pg_hba.conf -Datei oben der vorherige Eintrag:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!
9
Kenny Evitt

Das Problem ist immer noch Ihre pg_hba.conf-Datei. Diese Zeile: Sie finden diese Datei in/etc/postgres/varion/main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Dies sind kurze Beschreibungen beider Optionen gemäß den offiziellen PostgreSQL-Dokumenten zu Authentifizierungsmethoden.

Peer-Authentifizierung

Bei der Peer-Authentifizierungsmethode wird der Benutzername des Client-Betriebssystems vom Kernel abgerufen und als zulässiger Datenbankbenutzername verwendet (mit optionaler Benutzernamenszuordnung). Diese Methode wird nur bei lokalen Verbindungen unterstützt.

Passwort Authentifizierung

Die kennwortbasierten Authentifizierungsmethoden sind md5 und password. Diese Methoden funktionieren ähnlich, mit Ausnahme der Art und Weise, wie das Passwort über die Verbindung gesendet wird, nämlich MD5-Hash bzw. Klartext.

Wenn Sie sich Gedanken über Passwort-Sniffing-Angriffe machen, ist md5 vorzuziehen. Ein einfaches Passwort sollte nach Möglichkeit immer vermieden werden. Md5 kann jedoch nicht mit der Funktion db_user_namespace verwendet werden. Wenn die Verbindung durch SSL-Verschlüsselung geschützt ist, kann das Kennwort sicher verwendet werden (obwohl die SSL-Zertifikatauthentifizierung möglicherweise die bessere Wahl ist, wenn SSL verwendet wird).

Vergessen Sie nach dem Ändern dieser Datei nicht, Ihren PostgreSQL-Server neu zu starten. Wenn Sie unter Linux arbeiten, wäre das Sudo service postgresql restart.

7
Suneel Kumar

meine Lösung für PostgreSQL 9.3 unter Mac OS X in der Bash-Shell bestand darin, Sudo zu verwenden, um in den Datenordner zu gelangen, und dann die erforderlichen Zeilen an die Datei pg_hba.conf anzuhängen, damit allen Benutzern vertraut werden kann in der Lage, sich einzuloggen. Das habe ich getan:

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
Sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
Host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W
6
Aaron Lelevier

Ich habe mehr Zeit damit verbracht, diesen Fehler zu beheben, als ich zugeben möchte.

Die Reihenfolge der Authentifizierungskonfiguration in pg_hba.conf ist in Ihrem Fall meiner Meinung nach relevant. Die Standardkonfigurationsdatei enthält mehrere Zeilen in einer Vanilla-Installation. Diese Standardeinstellungen können den Bedingungen Ihrer Authentifizierungsversuche entsprechen, was zu einem Fehler bei der Authentifizierung führt. Es schlägt fehl, unabhängig von der zusätzlichen Konfiguration, die am Ende der .conf-Datei hinzugefügt wurde.

Um zu überprüfen, welche Konfigurationszeile verwendet wird, müssen Sie in der Standardprotokolldatei nach Nachrichten suchen. Sie könnten so etwas sehen

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "Host     all             all             127.0.0.1/32            ident"

Es hat sich herausgestellt, dass diese Standardzeile die Ablehnung verursacht.

Host    all             all             127.0.0.1/32            ident

versuchen Sie es auskommentieren.

4
Jeremy Whiting

Für Fedora26 und postgres9.6

Melden Sie sich zunächst als Benutzer root an
Geben Sie dann mit den folgenden Befehlen psql ein
$ su postgres
Geben Sie dann $ psql ein

in psql find location of hba_file ==> bedeutet pg_hba.conf

postgres = # show hba_file;

hba_file

/etc/postgresql/9.6/main/pg_hba.conf
(1 Zeile)

in der Datei pg_hba.conf ändern Sie den Benutzerzugriff darauf

Host all all 127.0.0.1/32 md5

4
mohsen.nour

Wenn Sie dies alles getan haben und es immer noch nicht funktioniert, überprüfen Sie den Ablauf für diesen Benutzer:

Postgres-Kennwortauthentifizierung schlägt fehl

4

In meinem Fall Lösung hier: (für die Betroffenen) Login zu Postgres:

Sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

grüße

4
VanThaoNguyen

Ein Hack um das herum ist die Bearbeitung von pg_hba.conf

Sudo vi /etc/postgresql/9.3/main/pg_hba.conf

Zu vorübergehend

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

An diesem Punkt sind Sie fertig. Aus Sicherheitsgründen gehen Sie dann und

Sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

dann gehe zurück und setze pg_hba.conf zurück auf

# Database administrative login by Unix domain socket
local   all             postgres                                   md5
3
ntg

Ich hatte ein ähnliches Problem und habe es in pg_hba.conf behoben, als alle ident Methoden entfernt wurden, auch für IP6-Adressen (trotz I) habe nur IP4 auf Maschine).

Host all all 127.0.0.1/32 password
Host all all ::1/128 password
#for pgAdmin running at local network
Host all all 192.168.0.0/24 md5
1
TMa

Ich musste pdAdmin neu installieren, um dieses Problem zu beheben

brew cask reinstall pgadmin4
0
Sofia Khwaja

Ich hatte das gleiche Problem, nachdem ich dies befolgt hatte: PostgreSQL-Setup für die Rails -Entwicklung in Ubuntu 12.04

Ich habe die anderen Antworten ausprobiert, aber alles, was ich tun musste, war: "config/database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:
0
Daniel

Wenn Sie es unter CentOS verwenden, müssen Sie möglicherweise postgres neu laden, nachdem Sie die oben genannten Lösungen durchgeführt haben:

systemctl restart postgresql-9.3.service
0
Jaswinder