Wie kann ich pg_dump dazu bringen, sich ordnungsgemäß zu authentifizieren?

98

Ich habe versucht, eine Hostvariable zu verwenden, PGPASSWORDund .pgpasskeine dieser beiden Variablen ermöglicht mir die Authentifizierung bei der Datenbank. Ich habe chmod‚d .pgpasszu den entsprechenden Berechtigungen und auch versucht:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Das Passwort enthält ein, \aber ich habe es in einfache Anführungszeichen gesetzt PGPASS='mypass\'und es wird immer noch nicht authentifiziert.

Ich renne:

pg_dump dbname -U username -Fc

und ich erhalte immer noch

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
Kosmonaut
quelle
1
Dieser Teil der Fehlermeldung "... Peer-Authentifizierung ..." bedeutet, dass die Kennwortauthentifizierung überhaupt nicht verwendet wird.
Milen A. Radev

Antworten:

196

Die schnelle Lösung

Das Problem ist, dass versucht wird, eine lokale peerAuthentifizierung basierend auf Ihrem aktuellen Benutzernamen durchzuführen . Wenn Sie ein Passwort verwenden möchten, müssen Sie den Hostnamen mit angeben -h.

pg_dump dbname -U username -h localhost -F c

Erläuterung

Dies ist auf Folgendes in Ihrem Fall zurückzuführen pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Dadurch wird Postgres peerangewiesen , die Authentifizierung für lokale Benutzer zu verwenden, für die der Postgres-Benutzername mit Ihrem aktuellen Systembenutzernamen übereinstimmen muss. Die zweite Zeile bezieht sich auf Verbindungen, die einen Hostnamen verwenden, und ermöglicht Ihnen die Authentifizierung mit einem Kennwort über die md5Methode.

Meine bevorzugte Entwicklungskonfiguration

HINWEIS : Dies sollte nur auf Einzelbenutzer-Workstations verwendet werden. Dies kann zu einer großen Sicherheitslücke auf einem Produktions- oder Mehrbenutzercomputer führen.

Bei der Entwicklung gegen eine lokale Postgres-Instanz möchte ich meine lokale Authentifizierungsmethode in ändern trust. Dies ermöglicht die Verbindung zu Postgres über einen lokalen Unix-Socket wie jeder Benutzer ohne Passwort. Dies kann durch einfaches Wechseln peerzu trustund erneutes Laden von Postgres erfolgen.

# Don't require a password for local connections
local   all             all                                     trust
Jim Mitchener
quelle
5
Für alle, die sich nicht sicher sind, wo sich Ihre conf-Datei befindet: use sudo locate pg_hba.conf- es muss sudo sein, da der postgres-Benutzer der einzige ist, der Zugriff auf das Verzeichnis hat (glaube ich).
JCollum
Ihr Befehl hat bei mir funktioniert, aber ich kann nicht herausfinden, wo er sich befindet oder wie die Datei heißt. Wie kann ich diese Datei finden?
Sobhan
-1

Manchmal kann man verwenden

sudo -u postgres pg_dump ...
Roland Pihlakas
quelle