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?

6voto

MageDev Punkte 271

Verwenden Sie host=localhost in der Verbindung.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);

6voto

Bitte befolgen Sie die untenstehenden Schritte

1). Navigieren Sie zuerst zum Verzeichnis /etc/postgresql/{Ihre pg-Version}/main.

Meine Version ist 10 dann:

cd /etc/postgresql/10/main

2). Hier befindet sich die pg_hba.conf-Datei, für die Sie möglicherweise sudo-Zugriff benötigen.

sudo nano pg_hba.conf

3). Scrollen Sie in der Datei, bis Sie Folgendes finden -

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

4). Ändern Sie hier peer auf md5 wie folgt.

# Database administrative login by Unix domain socket
local   all             all                                md5
  • peer bedeutet, dass es der Authentizität des UNIX-Benutzers vertraut und daher nicht nach dem Passwort fragt. md5 bedeutet, dass es immer nach einem Passwort fragt und es nach dem Hashing mit MD5 überprüft.

5). Speichern Sie nun die Datei und starten Sie den Postgres-Server neu.

sudo service postgresql restart

Jetzt sollte alles in Ordnung sein.

5voto

tayfun Kılıç Punkte 757

Pg_config ist für Kompilierungsinformationen, um Erweiterungen und Client-Programme beim Kompilieren und Verlinken gegen PostgreSQL zu unterstützen. Es weiß nichts über die aktive PostgreSQL-Instanz(en) auf dem Rechner, nur über die Binärdateien.

pg_hba.conf kann je nach Installation von Pg an vielen anderen Orten erscheinen. Der Standardort ist pg_hba.conf innerhalb des Datenverzeichnisses der Datenbank (das sich z.B. in /home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/, usw. befinden könnte), aber Benutzer und Paketbetreuer können es überall hinlegen, wo sie möchten. Leider.

Die einzigen gültigen Möglichkeiten, pg_hba.conf zu finden, sind entweder eine laufende PostgreSQL-Instanz nach seinem pg_hba.conf zu fragen oder den Systemadministrator zu fragen, wo es sich befindet. Sie können nicht einmal darauf vertrauen, zu fragen, wo das Datadir ist und die postgresql.conf zu parsen, weil ein Init-Skript Pg beim Starten z.B. einen Parameter wie -c hba_file=/some/other/path übergeben könnte.

Was Sie tun möchten, ist PostgreSQL fragen:

SHOW hba_file;

Dieser Befehl muss in einer Superuser-Sitzung ausgeführt werden, also für Shell-Skripte könnten Sie etwas wie folgt schreiben:

psql -t -P format=unaligned -c 'show hba_file';

und setzen Sie die Umgebungsvariablen PGUSER, PGDATABASE, usw., um sicherzustellen, dass die Verbindung richtig ist.

Ja, dies ist etwas wie ein Huhn-und-Ei-Problem, denn wenn der Benutzer keine Verbindung herstellen kann (zum Beispiel nach dem Verhunzen der Bearbeitung von pg_hba.conf), können Sie pg_hba.conf nicht finden, um es zu reparieren.

Eine weitere Option ist, die Ausgabe des ps-Befehls zu überprüfen und zu sehen, ob das Datenverzeichnisargument -D des Postmasters dort sichtbar ist, z.B.

ps aux  | grep 'postgres *-D'

da sich pg_hba.conf im Datenverzeichnis befinden wird (es sei denn, Sie verwenden Debian/Ubuntu oder eine Ableitung davon und deren Pakete).

Wenn Sie speziell auf Ubuntu-Systeme mit PostgreSQL abzielende Debian/Ubuntu-Pakete installiert haben, wird es etwas einfacher. Sie müssen sich nicht mit von Hand aus Quellen kompilierten Pg befassen, für das jemand ein Datadir in seinem Home-Verzeichnis initialisiert hat, oder mit einer EnterpriseDB Pg-Installation in /opt, usw. Sie können pg_wrapper, dem Debian/Ubuntu Multi-Version Pg-Manager, fragen, wo sich PostgreSQL befindet, indem Sie den Befehl pg_lsclusters von pg_wrapper verwenden.

Wenn Sie keine Verbindung herstellen können (Pg läuft nicht oder Sie müssen pg_hba.conf bearbeiten, um eine Verbindung herzustellen), müssen Sie nach pg_hba.conf-Dateien auf dem System suchen. Auf Mac und Linux funktioniert etwas wie sudo find / -type f -name pg_hba.conf. Überprüfen Sie dann die PG_VERSION-Datei im selben Verzeichnis, um sicherzustellen, dass es sich um die richtige PostgreSQL-Version handelt, wenn Sie mehr als eine haben. (Wenn sich pg_hba.conf in /etc/ befindet, ignorieren Sie dies, es ist der übergeordnete Verzeichnisname). Wenn Sie mehr als ein Datenverzeichnis für dieselbe PostgreSQL-Version haben, müssen Sie die Datenbankgröße überprüfen, die Befehlszeile des laufenden postgres von ps überprüfen, um zu sehen, ob sein Datenverzeichnis -D-Argument mit dem übereinstimmt, was Sie bearbeiten, usw. https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711

5voto

Du musst einfach die METHODE auf trust setzen.

#TYP  DATENBANK        BENUTZER            ADRESSE                 METHODE
local    all             all                                     trust

Und den Postgres-Server neu laden.

# service postgresql-9.5 reload

Änderungen in der pg_hba.conf erfordern keinen NEUSTART des Postgres-Servers. Einfach neu laden.

5voto

Mazen Ora Punkte 71

Der folgende Befehl funktioniert für mich:

psql -d myDb -U Benutzername -W

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