web-dev-qa-db-fra.com

Comment puis-je obtenir que pg_dump s'authentifie correctement

J'ai essayé d'utiliser la variable hôte PGPASSWORD et .pgpass et aucun de ces deux ne me permettra de m'authentifier auprès de la base de données. J'ai chmod 'd .pgpass aux autorisations appropriées et a également essayé:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Le mot de passe contient un \ cependant je l’encapsulais entre guillemets simples PGPASS='mypass\' et il ne sera toujours pas authentifié.

Je suis entrain de courir:

pg_dump dbname -U username -Fc

et je reçois encore

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

La solution rapide

Le problème est qu’il essaie d’effectuer une authentification locale peer 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 peer l'authentification pour les utilisateurs locaux, ce 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 le 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 entraîner une vulnérabilité majeure de la sécurité sur un ordinateur de production ou à plusieurs utilisateurs.

Lors du développement contre une instance postgres locale, j'aime bien changer ma méthode d'authentification locale en trust . Cela permettra de se connecter à postgres via un socket Unix local comme tout utilisateur sans mot de passe. Cela peut être fait en remplaçant simplement peer ci-dessus par trust et en rechargeant postgres.

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