Ich erhalte den Fehler:
FATAL: Peer authentication failed for user "postgres"
wenn ich versuche, Postgres mit Rails zum Laufen zu bringen.
Hier ist mein pg_hba.conf
, mein database.yml
und ein Dump der vollständigen Spur .
Ich habe die Authentifizierung in pg_hba in md5 geändert und verschiedene Dinge ausprobiert, aber keine scheint zu funktionieren.
Ich habe auch versucht, einen neuen Benutzer und eine neue Datenbank gemäß Rails 3.2, FATAL: Peer-Authentifizierung für Benutzer fehlgeschlagen (PG :: Error).
Aber sie erscheinen nicht auf pgadmin oder sogar wenn ich renne sudo -u postgres psql -l
.
Irgendeine Idee, wo ich falsch liege?
ruby-on-rails
postgresql
orderof1
quelle
quelle
localhost
aber erfolgreich127.0.0.1
.host: localhost
diedatabase.yml
Datei hinzufügen .Antworten:
Das Problem ist immer noch Ihre
pg_hba.conf
Datei (/etc/postgresql/9.1/main/pg_hba.conf*
).Diese Linie:
Sollte sein:
* Wenn Sie diese Datei nicht finden können,
locate pg_hba.conf
sollte beim Ausführen angezeigt werden, wo sich die Datei befindet.Vergessen Sie nach dem Ändern dieser Datei nicht, Ihren PostgreSQL-Server neu zu starten. Wenn Sie unter Linux sind, wäre das
sudo service postgresql restart
.Dies sind kurze Beschreibungen beider Optionen gemäß den offiziellen PostgreSQL-Dokumenten zu Authentifizierungsmethoden .
Peer-Authentifizierung
Passwortauthentifizierung
Beispielort für
pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
quelle
/etc/init.d/postgresql reload
/etc/postgresql/9.1/main/pg_hba.conf
sudo service postgreql restart
funktioniert das auch.Nach der Installation von Postgresql habe ich die folgenden Schritte ausgeführt.
Öffnen Sie die Datei
pg_hba.conf
für Ubuntu/etc/postgresql/9.x/main
und ändern Sie diese Zeile:zu
Starten Sie den Server neu
Melden Sie sich bei psql an und legen Sie Ihr Passwort fest
Ändern Sie zum Schluss das
pg_hba.conf
vonzu
Nach dem Neustart des postgresql-Servers können Sie mit Ihrem eigenen Passwort darauf zugreifen
Details zu den Authentifizierungsmethoden:
Weitere Informationen finden Sie hier
quelle
sudo passwd postgres
Wenn Sie eine Verbindung über localhost (127.0.0.1) herstellen, sollte dieses spezielle Problem nicht auftreten. Ich würde nicht viel mit der pg_hba.conf machen, aber stattdessen würde ich Ihre Verbindungszeichenfolge anpassen:
Dabei ist ein Benutzer Ihr Benutzer, unter dem Sie eine Verbindung herstellen, und Datenbank ist die Datenbank, zu der Ihr Benutzer eine Verbindung herstellen darf.
Folgendes mache ich auf Debian, um Postgres einzurichten:
Genießen!
quelle
host: 127.0.0.1
in config / database.yml von der Standardeinstellung auf localhost wechseln - es befindet sich auf demselben Computer, daher verstehe ich nicht warumDas hat bei mir funktioniert !!
quelle
Wenn Sie ein Problem haben, müssen Sie Ihre suchen
pg_hba.conf
. Der Befehl lautet:find / -name 'pg_hba.conf' 2>/dev/null
und danach die Konfigurationsdatei ändern:
Postgresql 9.3
Postgresql 9.4
Der nächste Schritt ist: Neustart Ihrer Datenbankinstanz:
service postgresql-9.3 restart
Wenn Sie Probleme haben, müssen Sie das Passwort erneut festlegen:
ALTER USER db_user with password 'db_password';
quelle
In meinem Fall:
Dies wird also geändert in:
Datenbankadministrative Anmeldung durch Unix Domain Socket lokal alle Postgres Peer
Diese:
Datenbankadministratorische Anmeldung durch Unix Domain Socket lokal alle postgres md5
Starten Sie dann pg server neu:
$> sudo service postgresql restart
Unten finden Sie eine Liste der METHODEN, die zur Verbindung mit Postgres verwendet werden:
Hinweis: Wenn Sie Ihren Postgres-Benutzer noch nicht erstellt haben. Erstellen Sie das und jetzt können Sie mit diesen Benutzeranmeldeinformationen auf den Postgres-Server zugreifen.
TIPP: Wenn es nach dem Neustart von postgres nicht funktioniert, schließen Sie das Terminal und öffnen Sie es erneut.
quelle
Dies löste mein Problem
quelle
Ich hatte das gleiche Problem.
Die Lösung von depa ist absolut richtig.
Stellen Sie einfach sicher, dass Sie einen Benutzer für die Verwendung von PostgreSQL konfiguriert haben.
Überprüfen Sie die Datei:
Die Berechtigung für diese Datei sollte dem Benutzer erteilt werden, bei dem Sie Ihre psql registriert haben.
Des Weiteren. Wenn du bis jetzt gut bist ..
Aktualisieren Sie gemäß den Anweisungen von @ depa.
dh
und dann Änderungen vornehmen.
quelle
-rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
Wenn Sie die Standardkonfiguration beibehalten möchten, aber eine MD5-Authentifizierung mit Socket-Verbindung für eine bestimmte Benutzer- / Datenbankverbindung wünschen, fügen Sie vor der Zeile "local all / all" eine "lokale" Zeile hinzu:
quelle
Ich habe das Datenverzeichnis auf einem geklonten Server verschoben und Probleme beim Anmelden als Postgres. Das Zurücksetzen des Postgres-Passworts hat bei mir funktioniert.
quelle
Die obigen Änderungen haben bei mir funktioniert, nachdem ich herausgefunden hatte, dass ich den Postgres-Server neu starten musste, nachdem ich sie vorgenommen hatte. Für Ubuntu:
quelle
Verfahren zum Ändern des Peer zu Vertrauen in pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | Zeile 85) löst das Problem. Wenn Sie md5 hinzufügen, werden Sie nach einem Kennwort gefragt. Wenn Sie daher die Verwendung von Kennwörtern vermeiden müssen, verwenden Sie Vertrauen anstelle von md5 .
quelle
Verwendung
host=localhost
in Verbindung.quelle
Der folgende Befehl funktioniert für mich:
quelle
-W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
Sie müssen nur METHOD einstellen, um zu vertrauen.
Und laden Sie den Postgres-Server neu.
Änderungen in pg_hba.conf erfordern keinen RESTART-Postgres-Server. einfach neu laden.
quelle
Viele der anderen Antworten beziehen sich auf Einstellungen in den verschiedenen Konfigurationsdateien, und diejenigen, die sich auf die Einstellungen beziehen,
pg_hba.conf
gelten und sind zu 100% korrekt. Stellen Sie jedoch sicher, dass Sie die richtigen Konfigurationsdateien ändern .Wie bereits erwähnt, können die Speicherorte der Konfigurationsdatei mit verschiedenen Einstellungen in der Hauptkonfigurationsdatei überschrieben werden. Außerdem kann ein Pfad zur Hauptkonfigurationsdatei in der Befehlszeile mit dem angegeben werden
-D
Option .Sie können den folgenden Befehl während einer psql-Sitzung verwenden, um anzuzeigen, wo Ihre Konfigurationsdateien gelesen werden (vorausgesetzt, Sie können psql starten). Dies ist nur ein Schritt zur Fehlerbehebung, der einigen Menschen helfen kann:
Sie sollten auch sicherstellen, dass sich das Ausgangsverzeichnis für Ihren Postgres-Benutzer dort befindet, wo Sie es erwarten. Ich sage dies, weil es ziemlich leicht ist, dies zu übersehen, da Ihre Eingabeaufforderung '
~
' anstelle des tatsächlichen Pfads Ihres Home-Verzeichnisses anzeigt , was es nicht so offensichtlich macht. Bei vielen Installationen wird standardmäßig das Home-Verzeichnis des Postgres-Benutzers verwendet/var/lib/pgsql
.Wenn es nicht auf das eingestellt ist, was es sein soll, beenden Sie den postgresql-Dienst und verwenden Sie den folgenden Befehl, während Sie als root angemeldet sind. Stellen Sie außerdem sicher, dass der Postgres-Benutzer nicht in einer anderen Sitzung angemeldet ist:
Stellen Sie schließlich sicher, dass Ihre PGDATA-Variable richtig eingestellt ist, indem Sie Folgendes eingeben
echo $PGDATA
, das Folgendes ausgeben sollte:Wenn es nicht festgelegt ist oder etwas anderes anzeigt, als Sie es erwarten, überprüfen Sie Ihre Start- oder RC-Dateien wie .profile oder .bash.rc - dies hängt stark von Ihrem Betriebssystem und Ihrer Shell ab. Nachdem Sie das richtige Startskript für Ihren Computer ermittelt haben, können Sie Folgendes einfügen:
Für mein System habe ich dies
/etc/profile.d/profile.local.sh
so platziert, dass es für alle Benutzer zugänglich ist.Sie sollten nun in der Lage sein, die Datenbank wie gewohnt zu initiieren und alle Ihre psql-Pfadeinstellungen sollten korrekt sein!
quelle
pg_config dient zur Kompatibilitätsinformation, um Erweiterungen und Clientprogramme beim Kompilieren und Verknüpfen mit PostgreSQL zu unterstützen. Es weiß nichts über die aktiven PostgreSQL-Instanzen auf dem Computer, nur die Binärdateien.
pg_hba.conf kann an vielen anderen Stellen angezeigt werden, je nachdem, wie Pg installiert wurde. Der Standardspeicherort ist pg_hba.conf im Datenverzeichnis der Datenbank (möglicherweise in / home, / var / lib / pgsql, / var / lib / postgresql / [version] /, / opt / postgres / usw. usw. usw.). Benutzer und Verpacker können es jedoch beliebig platzieren. Unglücklicherweise.
Die einzig gültige Möglichkeit, pg_hba.conf zu finden, besteht darin, eine laufende PostgreSQL-Instanz zu fragen, wo sich pg_hba.conf befindet, oder den Systemadministrator zu fragen, wo sie sich befindet. Sie können sich nicht einmal darauf verlassen, zu fragen, wo sich das Datenverzeichnis befindet, und die Datei postgresql.conf zu analysieren, da ein Init-Skript beim Starten von Pg möglicherweise einen Parameter wie -c hba_file = / some / other / path übergeben hat.
Was Sie tun möchten, ist PostgreSQL zu fragen:
Dieser Befehl muss in einer Superuser-Sitzung ausgeführt werden. Für Shell-Skripte können Sie also Folgendes schreiben:
und legen Sie die Umgebungsvariablen PGUSER, PGDATABASE usw. fest, um sicherzustellen, dass die Verbindung korrekt ist.
Ja, dies ist ein Henne-Ei-Problem. Wenn der Benutzer keine Verbindung herstellen kann (z. B. nachdem er die Bearbeitung von pg_hba.conf vermasselt hat), können Sie pg_hba.conf nicht finden, um es zu beheben.
Eine andere Möglichkeit besteht darin, die Ausgabe des Befehls ps zu überprüfen und festzustellen, ob das Postmaster-Datenverzeichnisargument -D dort sichtbar ist, z
da sich pg_hba.conf im Datenverzeichnis befindet (es sei denn, Sie arbeiten unter Debian / Ubuntu oder einem Derivat und verwenden deren Pakete).
Wenn Sie speziell auf Ubuntu-Systeme abzielen, auf denen PostgreSQL aus Debian / Ubuntu-Paketen installiert ist, wird dies etwas einfacher. Sie müssen sich nicht mit handkompilierter Pg aus der Quelle befassen, für die jemand ein Datenverzeichnis in seinem Home-Verzeichnis initiiert hat, oder mit einer EnterpriseDB-Pg-Installation in / opt usw. Sie können pg_wrapper, das Debian / Ubuntu-Multi, fragen -version Pg Manager, bei dem PostgreSQL den Befehl pg_lsclusters von pg_wrapper verwendet.
Wenn Sie keine Verbindung herstellen können (Pg wird nicht ausgeführt oder Sie müssen pg_hba.conf bearbeiten, um eine Verbindung herzustellen), müssen Sie das System nach pg_hba.conf-Dateien durchsuchen. Unter Mac und Linux reicht so etwas wie sudo find / -type f -name pg_hba.conf aus. Überprüfen Sie dann die Datei PG_VERSION 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 stattdessen der Name des übergeordneten Verzeichnisses). Wenn Sie mehr als ein Datenverzeichnis für dieselbe PostgreSQL-Version haben, müssen Sie die Datenbankgröße überprüfen. Überprüfen Sie in der Befehlszeile der ausgeführten Postgres von ps, ob das Argument des Datenverzeichnisses -D mit dem von Ihnen bearbeiteten übereinstimmt . /ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
quelle
Mein Problem war, dass ich keinen Server eingegeben habe. Ich dachte, es ist eine Standardeinstellung wegen Platzhalters, aber als ich localhost eingab, funktionierte es.
quelle
Wenn Sie versuchen, diese Datei in Cloud 9 zu finden, können Sie dies tun
Drücken Sie
I
zum Bearbeiten / Einfügen, drücken SieESC
3 - mal und geben Sie:wq
die Datei speichern und beendenquelle
Wenn Sie mit Rails auf dieses Problem stoßen und wissen, dass Sie diesen Benutzernamen bereits mit einem Kennwort und den richtigen Rechten erstellt haben, müssen Sie am Ende Ihrer Datei database.yml nur Folgendes einfügen.
Die Gesamtdatei sieht wie folgt aus
Sie müssen Ihre
pg_hba.conf
Datei überhaupt nicht berühren . Viel Spaß beim Codierenquelle
Einfachste Lösung ohne Änderung der Konfiguration. (ubuntu) Benutzer wechseln und dann eine Verbindung zur Datenbank-CLI herstellen.
entnommen aus https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
quelle