2012-05-03 17 views
72

Ho provato a utilizzare la variabile host PGPASSWORD e .pgpass e nessuno di questi due mi consentirà di autenticarsi nel database. Ho chmod 'd .pgpass di autorizzazioni appropriate e anche cercato:Come posso ottenere pg_dump per autenticare correttamente

export PGPASSWORD=mypass and PGPASSWORD=mypass 

La password contiene una \ tuttavia mi hanno stringe in singoli apici PGPASS='mypass\' e ancora non autenticherà.

Sto correndo:

pg_dump dbname -U username -Fc 

e ancora ricevo

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

che "... l'autenticazione peer ..." parte del messaggio di errore significa che non sta usando [autenticazione con password] (http://www.postgresql.org/docs/current/static/auth- methods.html # AUTH-PEER). –

risposta

149

La soluzione rapida

il problema è che si sta cercando di eseguire l'autenticazione locale peer, sulla base di nome utente corrente. Se si desidera utilizzare una password, è necessario specificare il nome host con -h.

pg_dump dbname -U username -h localhost -F c 

Spiegazione

questo è dovuto al seguente nella vostra pg_hba.conf

local all    all          peer 
host all    all    127.0.0.1/32   md5 

Questo dice Postgres utilizzare peer autenticazione per gli utenti locali che richiede la Postgres nome utente per abbinare il vostro sistema attuale nome utente. La seconda riga fa riferimento alle connessioni che utilizzano un nome host e consente di autenticare con una password tramite il metodo md5.

La mia preferita Sviluppo Config

NOTA: questo deve essere utilizzato solo sulle workstation singolo utente. Ciò potrebbe portare a una vulnerabilità di sicurezza maggiore su una macchina di produzione o multiutente.

Durante lo sviluppo su un'istanza Postgres locale, mi piace modificare il metodo di autenticazione locale su trust. Ciò consentirà la connessione a postgres tramite un socket unix locale come qualsiasi utente senza password. Può essere fatto semplicemente cambiando peer sopra a trust e ricaricando postgres.

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

Ha aiutato. grazie – StarWars

+3

Per chi non è sicuro di dove si trovi il tuo file conf: usa 'sudo locate pg_hba.conf' - deve essere sudo dato che l'utente postgres sarà l'unico con accesso alla directory (credo). – jcollum