it-swarm.com.de

Fehler beim Abrufen: Die Peer-Authentifizierung für Benutzer "postgres" ist fehlgeschlagen, wenn versucht wird, pgsql mit rails zum Laufen zu bringen.

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?

641
orderof1

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 .

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).

Beispielspeicherort für pg_hba.conf:
/etc/postgresql/9.1/main/pg_hba.conf

904
depa

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

  1. öffne die Datei 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
  1. Starten Sie den Server neu
Sudo service postgresql restart
  1. Melden Sie sich bei psql an und legen Sie Ihr Passwort fest

psql -U postgres

ALTER USER postgres with password 'your-pass';
  1. Ändern Sie abschließend den pg_hba.conf von
lokal 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

306
Arivarasan L

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!

176
StylusEater

Das hat bei mir geklappt !!

Sudo -u postgres psql
33
iamuser2

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.3

Postgresql 9.4

Postgresql 9.3

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';

15
d.danailov
  1. Gehen Sie zu dieser / etc/postgresql/9.x/main / und öffnen Sie pg_hba.conf Datei

In meinem Fall:

$>  Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Ersetzen Sie Peer durch md5

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
  1. 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.

15

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.

10
nirvanastack

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
7
Åsmund

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=#
6
Luca Marletta

Verwenden Sie in Verbindung Host=localhost.

PGconn *conn = PQconnectdb(
    "Host=localhost user=postgres dbname=postgres password=123"
);
6
Manisha Vasani

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
6
sibosop
Sudo psql --Host=localhost --dbname=database-name --username=postgres

Dies löste mein Problem

6
Gihan Gamage

der folgende Befehl funktioniert für mich:

psql -d myDb -U username -W
5
Mazen Ora

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.

5

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.

3

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!

3
Bill

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

2
Marshall

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

2
ImranNaqvi

Mein Problem war, dass ich keinen Server eingegeben habe. Ich dachte, es ist eine Vorgabe wegen Platzhalters, aber als ich localhost eintippte, funktionierte es.

2
Epsilon47