1225 Stimmen

Fehlermeldung: Peer-Authentifizierung fehlgeschlagen für Benutzer "postgres", beim Versuch, pgsql mit Rails zum Laufen zu bringen.

Ich bekomme den Fehler:

FATAL: Peer-Authentifizierung fehlgeschlagen für Benutzer "postgres"

wenn ich versuche, PostgreSQL mit Rails zu verwenden.

Hier ist meine pg_hba.conf, meine Datenbank.yml und ein Dump des kompletten Traces.

Ich habe die Authentifizierung in pg_hba auf md5 geändert und verschiedene Dinge ausprobiert, aber nichts scheint zu funktionieren.

Ich habe auch versucht, einen neuen Benutzer und eine neue Datenbank gemäß Rails 3.2, FATAL: Peer-Authentifizierung fehlgeschlagen für Benutzer (PG::Error) zu erstellen.

Aber sie erscheinen weder in pgadmin noch wenn ich sudo -u postgres psql -l ausführe.

Hast du eine Idee, wo ich den Fehler gemacht habe?

1569voto

Marcelo De Polli Punkte 27763

Das Problem liegt immer noch in Ihrer pg_hba.conf-Datei.

Diese Zeile:

local   all             postgres                                peer

Sollte sein:

local   all             postgres                                md5

Nachdem Sie diese Datei geändert haben, vergessen Sie nicht, Ihren PostgreSQL-Server neu zu starten. Wenn Sie Linux verwenden, wäre das sudo systemctl restart postgresql (auf älteren Systemen: sudo service postgresql restart).


Auffinden von hba.conf

Beachten Sie, dass der Speicherort dieser Datei nicht sehr konsistent ist.

Sie können locate pg_hba.conf verwenden oder PostgreSQL mit SHOW hba_file; fragen, um den Dateispeicherort zu ermitteln.

Übliche Speicherorte sind /etc/postgresql/[version]/main/pg_hba.conf und /var/lib/pgsql/data/pg_hba.conf.


Dies sind kurze Beschreibungen der Optionen peer vs md5 gemäß der offiziellen PostgreSQL-Dokumentation zu Authentifizierungsmethoden.

Peer-Authentifizierung

Die Peer-Authentifizierungsmethode funktioniert, indem der Benutzername des Client-Betriebssystems aus dem Kernel bezogen und als erlaubter Datenbankbenutzername verwendet wird (mit optionaler Benutzerzuordnung). Diese Methode wird nur bei lokalen Verbindungen unterstützt.

Passwort-Authentifizierung

Die passwortbasierten Authentifizierungsmethoden sind md5 und Passwort. Diese Methoden funktionieren ähnlich, bis auf die Art und Weise, wie das Passwort über die Verbindung übertragen wird, nämlich MD5-gehasht und Klartext Beide.

Wenn Sie sich überhaupt Sorgen um "Mitschneiden" von Passwörtern machen, dann ist md5 bevorzugt. Klartextpasswörter sollten immer vermieden werden, wenn möglich. Allerdings kann md5 nicht mit der Funktion db_user_namespace verwendet werden. Wenn die Verbindung durch SSL-Verschlüsselung geschützt ist, kann auch das Passwort sicher verwendet werden (obwohl die Authentifizierung über SSL-Zertifikate eine bessere Wahl sein könnte, wenn man auf die Verwendung von SSL angewiesen ist).

689voto

Arivarasan L Punkte 8848

Nach der Installation von Postgresql habe ich die folgenden Schritte ausgeführt.

  1. Öffnen Sie die Datei pg_hba.conf. Für Ubuntu verwenden Sie zum Beispiel /etc/postgresql/13/main$ sudo nano pg_hba.conf und ändern Sie diese Zeile am Ende der Datei, sie sollte die erste Zeile der Einstellungen sein:

    local   all             postgres                                peer

    zu

    local   all             postgres                                trust

    Anmerkung: Wenn Sie sich auch mit anderen Benutzern verbinden können möchten, müssen Sie auch ändern:

    local   all             all                                peer

    zu

    local   all             all                                md5

    Wenn Sie den Nano-Editor verwendet haben, beenden Sie mit doppeltem Escape, x, y, Enter, um die Konfigurationsdatei zu speichern.

  2. Starten Sie den Server neu

     $ sudo service postgresql restart

    Ausgabe: * PostgreSQL 13 Datenbankserver wird neu gestartet

  3. Melden Sie sich bei psql an und setzen Sie Ihr Passwort

     $ psql -U postgres
     db> ALTER USER postgres with password 'your-pass';

    Ausgabe: ALTER ROLLE

    Anmerkung: Wenn Sie andere Benutzer haben, benötigen auch sie ein Passwort:

     db> ALTER USER my_user with password 'your-pass';

    Dann geben Sie ein:

     exit
  4. Ändern Sie schließlich das pg_hba.conf von

    local   all             postgres                                trust

    zu

    local   all             postgres                                md5
  5. Starten Sie den Server erneut

     $ sudo service postgresql restart

    Ausgabe: * PostgreSQL 13 Datenbankserver wird neu gestartet

  6. Melden Sie sich als Benutzer postgres bei psql an

    Nach dem Neustart des postgresql-Servers akzeptiert der Benutzer postgres das von Ihnen gewählte Passwort:

     psql -U postgres

    Ausgabe:
    Passwort für Benutzer postgres:

    psql (13.4 (Ubuntu 13.4-1.pgdg20.04+1))

    Geben Sie "help" ein, um Hilfe zu erhalten.

    Und Sie sind in psql:

    postgres=#

    Anmerkung: Dasselbe gilt nun für my_user, wenn Sie den Benutzer und das Passwort hinzugefügt haben:

     psql -d DEINE_DB_NAME -U my_user

    Was Sie nach dem neuen Passwort von my_user

Details zu Authentifizierungsmethoden:

trust - jeder, der sich mit dem Server verbinden kann, ist berechtigt, auf die Datenbank zuzugreifen

peer - Verwendung des Benutzernamens des Betriebssystembenutzers des Clients als Datenbankbenutzernamen zum Zugriff darauf.

md5 - passwortbasierte Authentifizierung

für weitere Informationen sehen Sie hier nach

354voto

StylusEater Punkte 3599

Wenn Sie über localhost (127.0.0.1) verbinden, sollten Sie dieses bestimmte Problem nicht erleben. Ich würde nicht viel mit der pg_hba.conf herumspielen, sondern stattdessen Ihre Verbindungszeichenfolge anpassen:

psql -U someuser -h 127.0.0.1 database

wobei someuser der Benutzer ist, mit dem Sie sich verbinden, und database die Datenbank ist, auf die Ihr Benutzer die Berechtigung hat, sich zu verbinden.

Hier ist, was ich auf Debian mache, um PostgreSQL einzurichten:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

als root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

Viel Spaß!

110voto

iamuser2 Punkte 1061

Dies hat für mich funktioniert !!

sudo -u postgres psql

42voto

Gihan Gamage Punkte 2391
sudo psql --host=localhost --dbname=database-name --username=postgres

Dies hat mein Problem gelöst

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X