it-swarm.com.de

Wie kann ich pg_dump dazu bringen, sich korrekt zu authentifizieren?

Ich habe versucht, die Hostvariablen PGPASSWORD und .pgpass Zu verwenden, und keiner dieser beiden ermöglicht mir die Authentifizierung bei der Datenbank. Ich habe chmod 'd .pgpass Zu entsprechenden Berechtigungen und auch versucht:

export PGPASSWORD=mypass and PGPASSWORD=mypass

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

Ich renne:

pg_dump dbname -U username -Fc

und ich bekomme immer noch

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

Die schnelle Lösung

Das Problem ist, dass versucht wird, eine lokale peer Authentifizierung basierend auf Ihrem aktuellen Benutzernamen durchzuführen. 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 Folgendes in Ihrem pg_hba.conf zurückzuführen

local   all             all                                     peer
Host    all             all             127.0.0.1/32            md5

Dies weist Postgres an, die peer -Authentifizierung für lokale Benutzer zu verwenden, wobei der postgres-Benutzername mit Ihrem aktuellen Systembenutzernamen übereinstimmen muss. Die zweite Zeile bezieht sich auf Verbindungen unter Verwendung eines Hostnamens und ermöglicht Ihnen die Authentifizierung mit einem Kennwort über die Methode md5 .

Meine bevorzugte Entwicklungskonfiguration

[~ # ~] Hinweis [~ # ~] : Dies sollte nur auf Einzelplatzrechnern verwendet werden. Dies kann zu einer schwerwiegenden Sicherheitslücke auf einem Produktions- oder Mehrbenutzercomputer 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 als jeder Benutzer ohne Passwort. Dies kann durch einfaches Ändern von peer in trust und erneutes Laden von postgres erfolgen.

# Don't require a password for local connections
local   all             all                                     trust
177
Jim Mitchener