psql: FATAL: autenticazione ident non riuscita per l’utente “postgres”

Ho installato PostgreSQL e pgAdminIII sulla mia casella Ubuntu Karmic.

Sono in grado di usare pgAdminIII con successo (es. Connect / log on), tuttavia quando provo ad accedere al server usando lo stesso username / pwd sulla riga di comando (usando psql), ottengo l’errore:

psql: FATAL: Ident authentication failed for user "postgres" 

Qualcuno ora come risolvere questo problema?

Hai impostato le impostazioni corrette in pg_hba.conf?

Vedi https://help.ubuntu.com/stable/serverguide/postgresql.html come farlo.

I seguenti passi funzionano per una nuova installazione di postgres 9.1 su Ubuntu 12.04. (Funzionava anche con Postgres 9.3.9 su Ubuntu 14.04).

Di default, postgres crea un utente chiamato “postgres”. Accediamo come lei e le diamo una password.

 $ sudo -u postgres psql \password Enter password: ... ... 

Disconnettersi da psql digitando \q o ctrl+d . Quindi ci colleghiamo come “postgres”. La parte -h localhost è importante : dice al client psql che desideriamo connetterci usando una connessione TCP (che è configurata per usare l’autenticazione della password), e non tramite una connessione PEER (che non interessa la password).

 $ psql -U postgres -h localhost 

Modifica il file /etc/postgresql/8.4/main/pg_hba.conf e sostituisci ident o peer con md5 o trust , a seconda che tu voglia o meno chiedere una password sul tuo computer. Quindi ricaricare il file di configurazione con:

 /etc/init.d/postgresql reload 

Stai ricevendo questo errore perché stai fallendo l’autenticazione del client. In base al messaggio di errore, probabilmente si dispone della configurazione di Postgres predefinita, che imposta il metodo di autenticazione del client su “IDENT” per tutte le connessioni PostgreSQL.

Dovresti assolutamente leggere la sezione 19.1 Autenticazione client nel manuale di PostgreSQL per capire meglio le impostazioni di autenticazione disponibili (per ogni record in pg_hba.conf ), ma qui c’è lo snippet pertinente per aiutare con il problema che stai riscontrando (dal manuale della versione 9.5 ):

fiducia

Consenti la connessione incondizionatamente. Questo metodo consente a chiunque possa connettersi al server di database PostgreSQL di accedere come qualsiasi utente PostgreSQL che desidera, senza la necessità di una password o di qualsiasi altra autenticazione. Vedere la Sezione 19.3.1 per i dettagli.

rifiutare

Rifiuta la connessione incondizionatamente. Ciò è utile per “filtrare” determinati host da un gruppo, ad esempio una linea rifiutata potrebbe bloccare il collegamento di un host specifico, mentre una riga successiva consente la connessione degli host rimanenti in una rete specifica.

md5

Richiedere al client di fornire una password con hash MD5 doppio per l’autenticazione. Vedere la Sezione 19.3.2 per i dettagli.

parola d’ordine

Richiedere al client di fornire una password non criptata per l’autenticazione. Poiché la password viene inviata in chiaro tramite la rete, questa non deve essere utilizzata su reti non attendibili. Vedere la Sezione 19.3.2 per i dettagli.

GSS

Utilizza GSSAPI per autenticare l’utente. Questo è disponibile solo per le connessioni TCP / IP. Vedere la Sezione 19.3.3 per i dettagli.

SSPI

Usa SSPI per autenticare l’utente. Questo è disponibile solo su Windows. Vedere la Sezione 19.3.4 per i dettagli.

ident

Ottenere il nome utente del sistema operativo del client contattando il server ident sul client e verificare se corrisponde al nome utente del database richiesto. L’autenticazione Ident può essere utilizzata solo su connessioni TCP / IP. Se specificato per le connessioni locali, verrà utilizzata l’autenticazione peer. Vedere la Sezione 19.3.5 per i dettagli.

pari

Ottenere il nome utente del sistema operativo del client dal sistema operativo e verificare se corrisponde al nome utente del database richiesto. Questo è disponibile solo per le connessioni locali. Vedere la Sezione 19.3.6 per i dettagli.

LDAP

Autentica tramite un server LDAP. Vedere la Sezione 19.3.7 per i dettagli.

raggio

Autentica tramite un server RADIUS. Vedere la Sezione 19.3.8 per i dettagli.

cert

Autentica tramite i certificati client SSL. Vedere la Sezione 19.3.9 per i dettagli.

pam

Autenticazione tramite il servizio PAM (Pluggable Authentication Modules) fornito dal sistema operativo. Vedere la Sezione 19.3.10 per i dettagli.

Quindi … per risolvere il problema che stai riscontrando, puoi eseguire una delle seguenti azioni:

  1. Modificare i metodi di autenticazione definiti nel file pg_hba.conf in modo trust , md5 o password (in base alle esigenze di sicurezza e semplicità) per i record di connessione locale definiti in tale posizione.

  2. Aggiorna pg_ident.conf per mappare gli utenti del sistema operativo agli utenti di PostgreSQL e concedere loro i privilegi di accesso corrispondenti, in base alle tue esigenze.

  3. Lascia le impostazioni IDENT da solo e crea gli utenti nel tuo database per ogni utente del sistema operativo a cui vuoi concedere l’accesso. Se un utente è già autenticato dal sistema operativo e connesso, PostgreSQL non richiederà ulteriore autenticazione e concederà l’accesso a tale utente in base ai privilegi (ruoli) assegnati al database. Questa è la configurazione predefinita.

Nota: la posizione di pg_hba.conf e pg_ident.conf dipende dal sistema operativo.

Semplicemente aggiungendo il bit -h localhost era tutto il mio necessario per funzionare

È ansible impostare la variabile di ambiente PGHOST=localhost :

 $ psql -U db_user db_name psql: FATAL: Peer authentication failed for user "db_user" $ export PGHOST=localhost $ psql -U db_user db_name Password for user mfonline: 

Nel caso in cui nessuno dei suddetti lavori per te:

Ho fatto parecchie installazioni Postgres, ma sono stato sconcertato oggi su un sistema RedHat 6.5 (installazione di Postgres 9.3). La mia tipica configurazione di hba.conf che Aron mostra sopra non ha funzionato. Si è scoperto che il mio sistema utilizzava IPV6 e ignorava la configurazione di IPV4. Aggiungere la linea:

 host all all ::1/128 password 

mi ha permesso di accedere con successo.

Ho scoperto che dovevo installare un server di id quadro, che ascolta sulla porta 113.

 sudo apt-get install pidentd sudo service postgresql restart 

E poi ident ha funzionato.

Il problema è ancora il tuo file pg_hba.conf. Questa linea: puoi trovare questo file in / etc / postgres / varion / main

 local all postgres peer Should be local all postgres md5 

Queste sono brevi descrizioni di entrambe le opzioni in base ai documenti PostgreSQL ufficiali sui metodi di autenticazione.

Autenticazione peer

Il metodo di autenticazione peer funziona ottenendo il nome utente del sistema operativo del client dal kernel e utilizzandolo come nome utente del database consentito (con mapping facoltativa del nome utente). Questo metodo è supportato solo su connessioni locali.

Autenticazione della password

I metodi di autenticazione basati su password sono md5 e password. Questi metodi funzionano in modo simile, tranne per il modo in cui la password viene inviata attraverso la connessione, ovvero MD5-hash e clear-text, rispettivamente.

Se sei preoccupato per gli attacchi di “sniffing” della password, allora è preferito md5. La password semplice dovrebbe sempre essere evitata se ansible. Tuttavia, md5 non può essere utilizzato con la funzione db_user_namespace. Se la connessione è protetta dalla crittografia SSL, la password può essere utilizzata in modo sicuro (sebbene l’autenticazione con certificato SSL potrebbe essere una scelta migliore se si dipende dall’utilizzo di SSL).

Dopo aver modificato questo file, non dimenticare di riavviare il tuo server PostgreSQL. Se sei su Linux, sarebbe il sudo service postgresql restart.

Tra tutte le risposte sopra, nulla ha funzionato per me. Ho dovuto modificare manualmente la password degli utenti nel database e improvvisamente ha funzionato.

 psql -U postgres -d postgres -c "alter user produser with password 'produser';" 

Ho usato le seguenti impostazioni:

pg_hba.conf

 local all all peer # IPv4 local connections: host all all 127.0.0.1/32 password # IPv6 local connections: host all all ::1/128 password 

La connessione ha esito positivo per il seguente comando:

 psql -U produser -d dbname -h localhost -W 

la mia soluzione su PostgreSQL 9.3 su Mac OSX nella shell bash era quella di usare sudo per andare nella cartella dei dati, e quindi aggiungere le righe necessarie al file pg_hba.conf per consentire a tutti gli utenti di essere sicuri e poter accedere. è quello che ho fatto:

 # in bash_profile edit PGDATA environmental variable open ~/.bash_profile # append this line to bash_profile export PGDATA="/Library/PostgreSQL/9.3/data" # reload bash_profile source ~/.bash_profile # open pg_hba.conf in vim sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf # append these two lines to the end of the pg_hba.conf file local all all trust host all all 127.0.0.1/32 trust # can now login as user in bash psql -d  -U  -W 

Hmmm …

Se è ansible connettersi con il nome utente e la password in pgAdminIII ma non è ansible connettersi con psql , è probabile che questi due programmi si colleghino al database in modo diverso.

[Se ti stai connettendo a diversi database, innanzitutto prova a connetterti allo stesso database. Vedi sotto.]

Da PostgreSQL: Documentazione: 9.3: psql :

Se si omette il nome host, psql si connetterà tramite un socket dominio Unix a un server sull’host locale o tramite TCP / IP a localhost su computer che non dispongono di socket di dominio Unix.

Se non stai eseguendo qualcosa come psql ... -h host_name ... , e stai usando Ubuntu, psql dovrebbe connettersi tramite un socket dominio Unix, quindi PostgreSQL probabilmente non è configurato per consentire una delle password metodi di autenticazione per l’utente postgres .

Puoi testare questo eseguendo:

sudo -u postgres psql

Se quanto sopra funziona, il tuo server è probabilmente configurato per utilizzare l’autenticazione peer per le connessioni locali da parte dell’utente postgres , cioè chiedendo al sistema operativo il tuo nome utente per confermare che sei postgres .

Quindi è probabilmente il tuo file pg_hba.conf

Il percorso completo del file sarà qualcosa come /etc/postgresql/9.3/main/pg_hba.conf . Puoi visualizzarlo, ad esempio sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more

Se stai omettendo il nome host nel tuo comando psql , dovresti riuscire a connetterti se aggiungi la seguente voce al tuo file pg_hba.conf :

 # Connection type Database User IP addresses Method local all postgres md5 

[Le righe commentate nel file pg_hba.conf iniziano con # .]

Se si include il nome host nel comando psql , aggiungere invece questa voce:

 # Connection type Database User IP addresses Method host all postgres 127.0.0.1/32 md5 

È necessario inserire la voce prima che vengano aggiunte altre voci per la connessione tramite psql . In caso di dubbi su dove metterlo, basta metterlo prima della prima riga senza commento.

Ulteriori informazioni su pg_hba.conf

Da PostgreSQL: Documentation: 9.3: Il file pg_hba.conf [bold emphasis mine]:

Il primo record con un tipo di connessione corrispondente, l’indirizzo del cliente , il database richiesto e il nome utente viene utilizzato per eseguire l’autenticazione. Non esiste “fall-through” o “backup”: se viene selezionato un record e l’autenticazione fallisce, i record successivi non vengono considerati. Se nessun record corrisponde, l’accesso è negato.

Si noti che i record non corrispondono al metodo di autenticazione. Quindi, se il tuo file pg_hba.conf contiene la seguente voce:

 # Connection type Database User IP addresses Method local all postgres peer 

Quindi non sarai in grado di connetterti tramite:

psql -u postgres

A meno che una di queste voci non si trovi nel file pg_hba.conf sopra la voce precedente:

 # Connection type Database User IP addresses Method local all postgres md5 local all postgres password # Unencrypted! local all all md5 local all all password # Unencrypted! 

Se hai fatto tutto questo e ancora non funziona, controlla la scadenza per quell’utente:

L’autenticazione della password Postgres non riesce

Ho passato più tempo a risolvere questo errore che mi interessa ammettere.

L’ordine di configurazione dell’autenticazione in pg_hba.conf è pertinente nel tuo caso, penso. Il file di configurazione predefinito include diverse linee in un’installazione di vanilla. Questi valori predefiniti possono corrispondere alle condizioni dei tentativi di autenticazione che comportano un errore di autenticazione. Fallisce indipendentemente dalla configurazione aggiuntiva aggiunta alla fine del file .conf.

Per verificare quale linea di configurazione è utilizzata, assicurarsi di guardare il file di registro predefinito per i messaggi. Potresti vedere qualcosa di simile

 LOG: could not connect to Ident server at address "127.0.0.1", port 113: Connection refused FATAL: Ident authentication failed for user "acme" DETAIL: Connection matched pg_hba.conf line 82: "host all all 127.0.0.1/32 ident" 

Si scopre che questa linea predefinita sta causando il rifiuto.

 host all all 127.0.0.1/32 ident 

prova a commentarlo

Una modifica su questo è modificare pg_hba.conf

 sudo vi /etc/postgresql/9.3/main/pg_hba.conf 

Temporaneamente

 # Database administrative login by Unix domain socket local all postgres trust 

A questo punto hai finito. Per sicurezza, allora vai e

 sudo -u postgres psql template1 ALTER USER postgres with encrypted password 'your_password'; 

quindi torna indietro e imposta pg_hba.conf su

 # Database administrative login by Unix domain socket local all postgres md5 

Ho avuto un problema simile e l’ho risolto in pg_hba.conf durante la rimozione di tutti i metodi ident anche per l’indirizzo IP6 (nonostante abbia solo IP4 sulla macchina).

 host all all 127.0.0.1/32 password host all all ::1/128 password #for pgAdmin running at local network host all all 192.168.0.0/24 md5 

Nel mio caso, soluzione qui: (per le persone interessate) accedi a postgres:

 sudo -i -u postgres psql ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here 

Saluti

Per fedora26 e postgres9.6

Per prima cosa, registra come utente root
quindi accedere a psql dai seguenti comandi
$ su postgres
quindi digita $ psql

in psql trovare il percorso di hba_file ==> significa pg_hba.conf

postgres = # mostra hba_file;

hba_file

/etc/postgresql/9.6/main/pg_hba.conf
(1 riga)

nel file pg_hba.conf cambia l’accesso utente a questo

ospita tutto 127.0.0.1/32 md5

Ho avuto lo stesso issuse dopo aver seguito questo: l’ installazione di PostgreSQL per lo sviluppo di Rails in Ubuntu 12.04

Ho provato le altre risposte, ma tutto quello che dovevo fare era in: “config / database.yml”

 development: adapter: postgresql encoding: unicode database: (appname)_development pool: 5 username: (username you granted appname database priviledges to) password: 

Se lo si utilizza su CentOS, potrebbe essere necessario ricaricare postgres dopo aver apportato le soluzioni di cui sopra:

 systemctl restart postgresql-9.3.service 

Questo ha funzionato per me: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

 local all postgres trust local all myapp_usr trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust