Ich erhalte den Fehler:
_FATAL: Peer authentication failed for user "postgres"
_
wenn ich versuche, postgres mit Rails arbeiten zu lassen.
Hier ist mein pg_hba.conf
, mein database.yml
und ein Speicherauszug der vollständigen Ablaufverfolgung .
Ich habe die Authentifizierung in pg_hba auf 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) zu erstellen
Aber sie erscheinen nicht auf pgadmin oder selbst wenn ich _Sudo -u postgres psql -l
_ starte.
Irgendeine Idee, wo ich falsch liege?
Das Problem ist immer noch Ihre pg_hba.conf
-Datei (/etc/postgresql/9.1/main/pg_hba.conf*
).
Diese Linie:
local all postgres peer
Sollte sein:
local all postgres md5
* Wenn Sie diese Datei nicht finden können, sollte locate pg_hba.conf
Ihnen zeigen, wo sich die Datei befindet.
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
.
Dies sind kurze Beschreibungen beider Optionen gemäß offiziellen PostgreSQL-Dokumenten zu Authentifizierungsmethoden .
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.
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).
Beispielspeicherort für pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
Nach der Installation von Postgresql habe ich die folgenden Schritte ausgeführt.
pg_hba.conf
für Ubuntu in /etc/postgresql/9.x/main
und ändere diese Zeile:lokal alle postgres peer
zu
lokal alle Postgres vertrauen
Sudo service postgresql restart
psql -U postgres
ALTER USER postgres with password 'your-pass';
pg_hba.conf
vonlokal alle Postgres vertrauen
zu
lokal alle postgres md5
Nach dem Neustart des postgresql-Servers können Sie mit Ihrem eigenen Passwort darauf zugreifen
Details zu den Authentifizierungsmethoden:
vertrauen - Jeder, der eine Verbindung zum Server herstellen kann, ist berechtigt, auf die Datenbank zuzugreifen
peer - Verwenden Sie den Benutzernamen des Client-Betriebssystems als Datenbankbenutzernamen, um darauf zuzugreifen.
md5 - Passwortbasierte Authentifizierung
für weitere Referenz hier überprüfen
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 deine Verbindungszeichenfolge anpassen:
psql -U someuser -h 127.0.0.1 database
wobei someuser Ihr Benutzer ist, unter dem Sie eine Verbindung herstellen, und database die Datenbank, mit der Ihr Benutzer eine Verbindung herstellen darf.
Hier ist, was ich unter Debian mache, um postgres einzurichten:
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
[email protected]:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
[email protected]:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
[email protected]:~# apt-get update
[email protected]:~# apt-get install postgresql-9.4
[email protected]:~# su - postgres
[email protected]:~$ 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
[email protected]:~$ createdb -O someuser database
[email protected]:~$ psql -U someuser -h 127.0.0.1 database
Genießen!
Das hat bei mir geklappt !!
Sudo -u postgres psql
Wenn Sie ein Problem haben, müssen Sie Ihren pg_hba.conf
suchen. Der Befehl lautet:
find / -name 'pg_hba.conf' 2>/dev/null
und danach ändere die Konfigurationsdatei:
Postgresql 9.3
Postgresql 9.4
Der nächste Schritt ist: Neustarten der 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';
In meinem Fall:
$> Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
Also wird dies geändert in:
Datenbank-Administrator-Login über Unix-Domain-Socket lokal alle Postgres-Peers
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
Host all all 127.0.0.1/32 md5
This:
Datenbank Administrator Login durch Unix Domain Socket lokal alle postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
Host all all 127.0.0.1/32 md5
Dann starte pg server neu:
$> Sudo-Dienst nach dem Neustart von Gresql
Unten finden Sie eine Liste der Methoden, die zum Verbinden mit Postgres verwendet werden:
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
Hinweis: Wenn Sie noch keinen postgres-Benutzer angelegt haben. Erstellen Sie das und jetzt können Sie mit diesen Benutzeranmeldeinformationen auf den Postgres-Server zugreifen.
TIPP: Wenn es nach dem Neustart nicht funktioniert, schließen Sie das Terminal und öffnen Sie es erneut.
Ich hatte das gleiche problem.
Die Lösung von depa ist absolut richtig.
Stellen Sie einfach sicher, dass ein Benutzer für die Verwendung von PostgreSQL konfiguriert ist.
Überprüfen Sie die Datei:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
Die Erlaubnis für diese Datei sollte dem Benutzer erteilt werden, bei dem Sie Ihre psql registriert haben.
Des Weiteren. Wenn Sie bis jetzt gut sind ..
Aktualisieren Sie gemäß den Anweisungen von @ depa.
d.h.
$ Sudo nano /etc/postgresql/9.1/main/pg_hba.conf
und dann Änderungen vornehmen.
Wenn Sie die Standardkonfiguration beibehalten möchten, aber die md5-Authentifizierung mit Socket-Verbindung für einen bestimmten Benutzer/eine bestimmte Datenbankverbindung wünschen, fügen Sie vor der Zeile "local all/all" eine "local" -Zeile hinzu:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local username dbname md5 # <-- this line
local all all peer
# IPv4 local connections:
Host all all 127.0.0.1/32 ident
# IPv6 local connections:
Host all all ::1/128 ident
Ich habe das Datenverzeichnis auf einen geklonten Server verschoben und Probleme gehabt, mich als Postgres anzumelden. Das Zurücksetzen des Postgres-Passworts hat bei mir funktioniert.
root# su postgres
postgres$ psql -U postgres
psql (9.3.6)
Type "help" for help.
postgres=#\password
Enter new password:
Enter it again:
postgres=#
Verwenden Sie in Verbindung Host=localhost
.
PGconn *conn = PQconnectdb(
"Host=localhost user=postgres dbname=postgres password=123"
);
Die obigen Änderungen haben für mich funktioniert, nachdem ich herausgefunden hatte, dass ich den Postgres-Server neu starten musste, nachdem ich sie vorgenommen hatte. Für Ubuntu:
Sudo /etc/init.d/postgresql restart
Sudo psql --Host=localhost --dbname=database-name --username=postgres
Dies löste mein Problem
der folgende Befehl funktioniert für mich:
psql -d myDb -U username -W
Durch Ändern von METHOD Peer in Trust in pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | Zeile 85) wird das Problem behoben. Wenn Sie md5 hinzufügen, werden Sie nach einem Kennwort gefragt. Wenn Sie Kennwörter vermeiden möchten, verwenden Sie trust anstelle von md5.
Sie müssen nur METHODE festlegen, um zu vertrauen.
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
Und postgres Server neu laden.
# service postgresql-9.5 reload
Änderungen in der Datei pg_hba.conf erfordern keinen Neustart des Postgres-Servers. Nur RELOAD.
Viele der anderen Antworten beziehen sich auf Einstellungen in den verschiedenen Konfigurationsdateien, und diejenigen, die sich auf pg_hba.conf
beziehen, sind zutreffend und 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 und mit der Option -D
ein Pfad zur Hauptkonfigurationsdatei in der Befehlszeile angegeben werden.
Mit dem folgenden Befehl können Sie in einer psql-Sitzung anzeigen, wo Ihre Konfigurationsdateien gelesen werden (vorausgesetzt, Sie können psql starten). Dies ist nur ein Schritt zur Fehlerbehebung, der einigen Menschen helfen kann:
select * from pg_settings where setting~'pgsql';
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 einfach ist, dies zu übersehen, da in Ihrer Eingabeaufforderung "~
" anstelle des tatsächlichen Pfads Ihres Home-Verzeichnisses angezeigt wird, was es nicht so offensichtlich macht. Bei vielen Installationen ist das Ausgangsverzeichnis des Benutzers postgres standardmäßig /var/lib/pgsql
.
Wenn dies nicht der Fall ist, 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 Benutzer postgres nicht in einer anderen Sitzung angemeldet ist:
usermod -d /path/pgsql postgres
Stellen Sie abschließend sicher, dass Ihre PGDATA-Variable richtig eingestellt ist, indem Sie echo $PGDATA
eingeben, was ungefähr so aussehen sollte:
/path/pgsql/data
Wenn es nicht festgelegt ist oder etwas anderes anzeigt, als Sie erwarten, untersuchen Sie Ihre Startup- 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:
export PGDATA=/path/pgsql/data
Für mein System habe ich dies in /etc/profile.d/profile.local.sh
platziert, damit alle Benutzer darauf zugreifen können.
Sie sollten nun in der Lage sein, die Datenbank wie gewohnt zu initialisieren und alle Ihre PSQL-Pfadeinstellungen sollten korrekt sein!
Wenn Sie versuchen, diese Datei in Cloud 9 zu finden, können Sie dies tun
Sudo vim /var/lib/pgsql9/data/pg_hba.conf
Drücken Sie zum Bearbeiten/Einfügen I
, drücken Sie ESC
dreimal und geben Sie :wq
ein, um die Datei zu speichern und zu beenden
Wenn Sie dieses Problem mit Rails haben und wissen, dass Sie diesen Benutzernamen mit dem richtigen Kennwort und den richtigen Rechten bereits erstellt haben, müssen Sie am Ende Ihrer database.yml-Datei nur Folgendes einfügen.
Host: localhost
die gesamte Datei wird wie folgt aussehen
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
Host: localhost
Sie müssen Ihre pg_hba.conf
-Datei überhaupt nicht berühren. Fröhliches Codieren
Mein Problem war, dass ich keinen Server eingegeben habe. Ich dachte, es ist eine Vorgabe wegen Platzhalters, aber als ich localhost eintippte, funktionierte es.