118 votes

Comment puis-je faire en sorte que pg_dump s'authentifie correctement ?

J'ai essayé d'utiliser la variable hôte PGPASSWORD y .pgpass et aucun de ces deux ne me permet de m'authentifier auprès de la base de données. J'ai chmod 'd .pgpass aux permissions appropriées et a également 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'authentifie toujours pas.

Je suis en train 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"

2 votes

La partie "...Authentification par les pairs..." du message d'erreur signifie qu'il n'y a pas d'authentification par les pairs. authentification par mot de passe du tout.

227voto

jcm Points 4968

La solution rapide

Le problème est qu'il essaye d'exécuter localement peer l'authentification basée sur 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

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

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Ceci indique à Postgres d'utiliser peer l'authentification pour les utilisateurs locaux qui exige que le nom d'utilisateur postgres corresponde à votre nom d'utilisateur système actuel. La deuxième ligne se réfère aux connexions utilisant un nom d'hôte et vous permettra de vous authentifier avec un mot de passe via le champ md5 méthode.

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

NOTE : Cette option ne doit être utilisée que sur des postes de travail à utilisateur unique. Cela pourrait conduire à une vulnérabilité de sécurité majeure sur une machine de production ou multi-utilisateurs.

Lorsque je développe contre une instance locale de postgres, j'aime changer ma méthode d'authentification locale en trust . Cela permettra de se connecter à postgres via un socket unix local en tant que n'importe quel utilisateur sans mot de passe. Cela peut être fait en changeant simplement peer ci-dessus pour trust et recharger postgres.

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

6 votes

Pour tous ceux qui ne savent pas où se trouve votre fichier de conf : utilisez sudo locate pg_hba.conf -- il doit être sudo puisque l'utilisateur postgres sera le seul à avoir accès au répertoire (je pense).

0 votes

Votre commande a fonctionné pour moi mais je ne peux pas trouver où il est, ou quel est le nom du fichier, comment puis-je trouver ce fichier ?

0 votes

Si je configure mon Postgres dans Docker, cette configuration fonctionnera-t-elle pour les connexions provenant de mon hôte local ?

12voto

Roland Pihlakas Points 583

Parfois, vous pouvez utiliser

sudo -u postgres pg_dump ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X