Ich habe versucht, eine Hostvariable zu verwenden, PGPASSWORD
und .pgpass
keine dieser beiden Variablen ermöglicht mir die Authentifizierung bei der Datenbank. Ich habe chmod
‚d .pgpass
zu 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"
postgresql
pg-dump
Kosmonaut
quelle
quelle
Antworten:
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 angeben-h
.Erläuterung
Dies ist auf Folgendes in Ihrem Fall zurückzuführen
pg_hba.conf
Dadurch wird Postgres
peer
angewiesen , 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 diemd5
Methode.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 Wechselnpeer
zutrust
und erneutes Laden von Postgres erfolgen.quelle
sudo locate pg_hba.conf
- es muss sudo sein, da der postgres-Benutzer der einzige ist, der Zugriff auf das Verzeichnis hat (glaube ich).Manchmal kann man verwenden
quelle