Comment puis-je faire authentifier pg_dump correctement

99

Je l' ai essayé d' utiliser la variable hôte PGPASSWORDet .pgpassni de ces deux me permettra d'authentifier la base de données. J'ai chmod« d .pgpassaux autorisations appropriées et aussi essayé:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Le mot de passe contient un \mais je l'ai mis entre guillemets simples PGPASS='mypass\'et il ne s'authentifiera toujours pas.

Je suis entrain de courir:

pg_dump dbname -U username -Fc

et je reçois toujours

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
Kosmonaut
la source
1
Cette partie "... Authentification par les pairs ..." du message d'erreur signifie qu'il n'utilise pas du tout l' authentification par mot de passe .
Milen A. Radev

Réponses:

198

La solution rapide

Le problème est qu'il essaie d'effectuer une peerauthentification locale en fonction de votre nom d'utilisateur actuel. Si vous souhaitez utiliser un mot de passe, vous devez spécifier le nom d'hôte avec -h.

pg_dump dbname -U username -h localhost -F c

Explication

Cela est dû à ce qui suit dans votre pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Cela indique à Postgres d'utiliser l' peerauthentification pour les utilisateurs locaux qui nécessite que le nom d'utilisateur postgres corresponde à votre nom d'utilisateur système actuel. La deuxième ligne fait référence aux connexions utilisant un nom d'hôte et vous permettra de vous authentifier avec un mot de passe via la md5méthode.

Ma configuration de développement préférée

REMARQUE : cela ne doit être utilisé que sur les postes de travail mono-utilisateur. Cela pourrait conduire à une faille de sécurité majeure sur une machine de production ou multi-utilisateurs.

Lors du développement sur une instance postgres locale, j'aime changer ma méthode d'authentification locale en trust. Cela permettra de se connecter à postgres via une socket unix locale comme n'importe quel utilisateur sans mot de passe. Cela peut être fait en changeant simplement peerci-dessus trustet en rechargeant postgres.

# Don't require a password for local connections
local   all             all                                     trust
Jim Mitchener
la source
6
Pour quiconque ne sait pas où se trouve votre fichier conf: utilisez sudo locate pg_hba.conf- il doit être sudo car l'utilisateur postgres sera le seul à avoir accès au répertoire (je pense).
jcollum
votre commande a fonctionné pour moi mais je ne peux pas savoir où elle se trouve, ni quel est le nom du fichier, comment puis-je trouver ce fichier?
Sobhan
Si je configure mes Postgres dans Docker, cette configuration fonctionnera-t-elle pour les connexions venant de mon hôte local?
Jack Chi le
-1

Parfois, vous pouvez utiliser

sudo -u postgres pg_dump ...
Roland Pihlakas
la source