Frage Wie kann ich pg_dump richtig authentifizieren?


Ich habe versucht, Host-Variable zu verwenden PGPASSWORD und .pgpass und keiner von diesen beiden erlaubt mir, mich bei der Datenbank zu authentifizieren. ich habe chmod'd .pgpass zu den entsprechenden Berechtigungen und auch versucht:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Das Passwort enthält a \ aber ich habe es in einfache Anführungszeichen eingeschlossen PGPASS='mypass\' und es wird immer noch nicht authentifizieren.

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"

76
2018-05-03 11:42


Ursprung


Antworten:


Die schnelle Lösung

Das Problem ist, dass versucht wird, lokal zu arbeiten peer Authentifizierung basierend auf Ihrem aktuellen Benutzernamen. 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 aufgrund der folgenden in Ihrem pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Dies sagt Postgres zu verwenden peer Authentifizierung für lokale Benutzer, für die der postgres-Benutzername erforderlich ist, um mit Ihrem aktuellen Systembenutzernamen übereinzustimmen. Die zweite Zeile bezieht sich auf Verbindungen, die einen Hostnamen verwenden, und ermöglicht es Ihnen, sich mit einem Passwort über das Internet zu authentifizieren md5 Methode.

Meine bevorzugte Entwicklungskonfiguration

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 ändern trust. Dies ermöglicht die Verbindung zu Postgres über einen lokalen Unix-Socket wie jeder Benutzer ohne Passwort. Es kann getan werden, indem man einfach ändert peer oben zu trust und postgres neu laden.

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

154
2018-05-03 19:34