2012-05-03 12 views
72

Ich habe versucht, Host-Variable PGPASSWORD und .pgpass und keiner dieser beiden wird mir erlauben, mit der Datenbank zu authentifizieren. Ich habe chmod.pgpass zu entsprechenden Berechtigungen d und auch versucht:Wie kann ich pg_dump richtig authentifizieren

export PGPASSWORD=mypass and PGPASSWORD=mypass 

Das Passwort ein \ enthält aber ich war es in Apostrophe Umhüllen PGPASS='mypass\' und es wird immer noch nicht authentifizieren.

Ich bin mit:

pg_dump dbname -U username -Fc 

und ich erhalte noch

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username" 
+1

Die „... Peer-Authentifizierung ...“ Teil der Fehlermeldung bedeutet, dass es nicht [Passwort-Authentifizierung] ist mit (http://www.postgresql.org/docs/current/static/auth- methods.html # AUTH-PEER) überhaupt. –

Antwort

149

Die schnelle Lösung

Das Problem ist, dass es lokale peer Authentifizierung basierend auszuführen versucht, auf Ihrem aktueller Benutzername Wenn Sie ein Passwort verwenden möchten, müssen Sie den Hostnamen mit -h angeben.

pg_dump dbname -U username -h localhost -F c 

Erklärung

Dies ist auf die folgenden in Ihrem pg_hba.conf

local all    all          peer 
host all    all    127.0.0.1/32   md5 

Diese Postgres peer Authentifizierung für lokale Benutzer zu verwenden, gibt an, welche die Postgres erfordert Ihr aktuelles System anzupassen Benutzername Nutzername. Die zweite Zeile bezieht sich auf Verbindungen, die einen Hostnamen verwenden und ermöglicht es Ihnen, sich mit einem Passwort über die Methode md5 zu authentifizieren.

Meine bevorzugte Entwicklung Config

HINWEIS: Dies sollte nur auf Einzelbenutzer-Workstations verwendet werden. Dies könnte zu einer größeren Sicherheitslücke auf einem Produktions- oder Multi-User-Rechner führen.

Bei der Entwicklung gegen eine lokale Postgres-Instanz möchte ich meine lokale Authentifizierungsmethode auf trust ändern. Dies ermöglicht die Verbindung zu Postgres über einen lokalen Unix-Socket wie jeder Benutzer ohne Passwort. Es kann getan werden, indem einfach peer oben zu trust geändert wird und postgres neu geladen wird.

# Don't require a password for local connections 
local all    all          trust 
+2

Es hat geholfen. danke – StarWars

+3

Für jeden unsicher, wo Ihre Conf-Datei ist: Verwenden Sie 'sudo suchen Sie pg_hba.conf '- es muss sudo sein, da der Postgres-Benutzer der einzige mit Zugriff auf das Verzeichnis sein wird (denke ich). – jcollum

Verwandte Themen