Come posso ottenere che pg_dump si autentichi correttamente


98

Ho provato con variabile host PGPASSWORDe .pgpasse nessuno di questi due mi permetterà di autenticare al database. Ho ottenuto chmodle .pgpassautorizzazioni appropriate e ho anche provato:

export PGPASSWORD=mypass and PGPASSWORD=mypass

La password contiene un \tuttavia la stavo racchiudendo tra virgolette singole PGPASS='mypass\'e ancora non verrà autenticata.

Sto correndo:

pg_dump dbname -U username -Fc

e ricevo ancora

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

1
Quella parte "... Autenticazione peer ..." del messaggio di errore significa che non utilizza affatto l' autenticazione della password .
Milen A. Radev

Risposte:


197

La soluzione rapida

Il problema è che sta tentando di eseguire l' peerautenticazione locale in base al tuo nome utente corrente. Se desideri utilizzare una password, devi specificare il nome host con -h.

pg_dump dbname -U username -h localhost -F c

Spiegazione

Ciò è dovuto a quanto segue nel tuo file pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Questo dice a Postgres di usare l' peerautenticazione per gli utenti locali che richiede che il nome utente di postgres corrisponda al tuo nome utente di sistema corrente. La seconda riga si riferisce alle connessioni che utilizzano un nome host e ti consentirà di autenticarti con una password tramite il md5metodo.

La mia configurazione di sviluppo preferita

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

Durante lo sviluppo su un'istanza postgres locale, mi piace cambiare il mio metodo di autenticazione locale in trust. Ciò consentirà la connessione a postgres tramite un socket unix locale come qualsiasi utente senza password. Può essere fatto semplicemente cambiando peersopra truste ricaricando postgres.

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

6
Per chiunque non sia sicuro di dove sia il tuo file conf: usa sudo locate pg_hba.conf- deve essere sudo poiché l'utente postgres sarà l'unico con accesso alla directory (credo).
jcollum

il tuo comando ha funzionato per me ma non riesco a scoprire dove si trova, o qual è il nome del file, come posso trovare quel file?
Sobhan

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.