psql: FATAL: autenticazione Ident non riuscita per l'utente "postgres"


372

Ho installato PostgreSQL e pgAdminIII sul mio box Ubuntu Karmic.

Sono in grado di utilizzare correttamente pgAdminIII (ovvero connettersi / accedere), tuttavia quando provo ad accedere al server utilizzando lo stesso nome utente / pwd sulla riga di comando (utilizzando psql), ottengo l'errore:

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

Qualcuno ora come risolvere questo problema?


Questo post su StackOverflow ha funzionato per me: StackOverflow.com/a/18664239/2110769
Andrea Araldo,

Risposte:


194

Hai impostato le impostazioni corrette in pg_hba.conf?

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


36
Questo non funziona per me. Ci ho passato ore! Tutto quello che voglio fare è eseguire i comandi psql nel mio terminale. Di cosa ho bisogno per far sembrare il file per fare questo ??
Sean,

54
@SeanA hai bisogno di qualcosa come 'sudo -u postgres psql'
JLarky,

8
Non dimenticare di ';' alla fine di ogni affermazione su psql. Sembra sciocco ma succede hehe.
omrsin,

42
@Robert: "postgresql è il db più ostile all'utente"? Prova Oracle un giorno per avere una prospettiva ... :)
mivk

5
Per quelli che usano le rotaie, ho dovuto impostare pg_hba.conf e cambiare 'ident' in 'password'. Cambiarlo in trust non ha funzionato.
Abe Petrillo,

412

I seguenti passaggi funzionano per una nuova installazione di Postgres 9.1 su Ubuntu 12.04. (Ha funzionato per Postgres 9.3.9 anche su Ubuntu 14.04.)

Per impostazione predefinita, postgres crea un utente chiamato "postgres". Accediamo come lei e le diamo una password.

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

Disconnettersi psqldigitando \qo ctrl+d. Quindi ci colleghiamo come 'postgres'. La -h localhostparte è importante : dice al psqlclient che desideriamo connetterci usando una connessione TCP (che è configurata per usare l'autenticazione con password), e non tramite una connessione PEER (a cui non importa la password).

$ psql -U postgres -h localhost

13
Se si imposta PGHOST=localhostnon è necessario specificare l' -hopzione ogni volta. Questo funziona anche con altri pg_*comandi come pg_dump.
Stesso


2
Ciò era necessario per abilitare un'installazione di Mediawiki su Debian con PostgreSQL.
mivk,

2 anni dopo, e devo farlo anche su un Mac .
Manav,

1
male perché c'è un problema di sicurezza, vedi qui: serverfault.com/questions/110154/…
Erdinc Ay

161

Modificare il file /etc/postgresql/8.4/main/pg_hba.confe sostituirlo idento peercon uno md5o trust, a seconda che si desideri o meno richiedere una password sul proprio computer. Quindi ricaricare il file di configurazione con:

/etc/init.d/postgresql reload

4
un comando riavvio postgresql: /etc/init.d/postgresql restart
Tyler Long

14
Perché riavviare quando è sufficiente una ricarica?
Frank Heikens,

In questo caso: "/etc/init.d/postgresql-8.4 ricaricare"
shaytac,

1
questo qui ha funzionato per me. Il passaggio da peer a md5 è stato sufficiente.
Jonatas CD,

1
OK, sono un postobesql noob, ma devo segnalare che ha restartfunzionato solo per me, non reload--- dopo le modifiche a /etc/postgresql/9.5/main/pg_hba.conf(passando peera trust).
Mike O'Connor,

91

Ricevi questo errore perché non riesci a eseguire l'autenticazione client. Sulla base del messaggio di errore, probabilmente hai la configurazione postgres predefinita, che imposta il metodo di autenticazione client su "IDENT" per tutte le connessioni PostgreSQL.

Dovresti assolutamente leggere la sezione 19.1 Autenticazione client nel manuale PostgreSQL per comprendere meglio le impostazioni di autenticazione disponibili (per ogni record in pg_hba.conf ), ma ecco lo snippet pertinente per aiutarti a risolvere il problema (dal manuale versione 9.5 ):

fiducia

Consenti la connessione incondizionatamente. Questo metodo consente a chiunque sia in grado di connettersi al server di database PostgreSQL di accedere come qualsiasi utente PostgreSQL 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 di rifiuto potrebbe bloccare la connessione di un host specifico, mentre una riga successiva consente la connessione degli host rimanenti in una rete specifica.

md5

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

parola d'ordine

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

GSS

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

SSPI

Utilizzare 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 che corrisponda al nome utente del database richiesto. L'autenticazione Ident può essere utilizzata solo su connessioni TCP / IP. Se specificato per le connessioni locali, verrà invece 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 che corrisponda al nome utente del database richiesto. Questo è disponibile solo per le connessioni locali. Vedere la Sezione 19.3.6 per i dettagli.

LDAP

Autenticare utilizzando un server LDAP. Vedere la Sezione 19.3.7 per i dettagli.

raggio

Autenticare utilizzando un server RADIUS. Vedere la Sezione 19.3.8 per i dettagli.

cert

Autenticare utilizzando i certificati client SSL. Vedere la Sezione 19.3.9 per i dettagli.

pam

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

Quindi ... per risolvere il problema riscontrato, è possibile effettuare una delle seguenti operazioni:

  1. Modificare i metodi di autenticazione definiti nel pg_hba.conf file in trust, md5o password(a seconda delle esigenze di sicurezza e semplicità) per i record di connessione locale che sono stati definiti lì.

  2. Aggiorna pg_ident.confper mappare gli utenti del tuo sistema operativo agli utenti PostgreSQL e concedi loro i privilegi di accesso corrispondenti, a seconda delle tue esigenze.

  3. Lasciare da sole le impostazioni IDENT e creare utenti nel database per ciascun utente del sistema operativo a cui si desidera concedere l'accesso. Se un utente è già autenticato dal sistema operativo e ha effettuato l'accesso, PostgreSQL non richiederà ulteriori autenticazioni e garantirà l'accesso a tale utente in base ai privilegi (ruoli) assegnati nel database. Questa è la configurazione predefinita.

Nota: la posizione di pg_hba.confe pg_ident.confdipende dal sistema operativo.


4
Per me questa è la risposta migliore. Quando conosci tutte queste opzioni puoi facilmente modificare la conf. E soprattutto quando sei sulla macchina Dev puoi semplicemente impostare 'ident' per tutte le voci per evitare di perdere tempo. Grazie
venkatareddy,

1
Questo è stato utile anche per me. Nel mio caso il file pg_hba.conf era impostato su peer, l'ho cambiato in password. Da un'installazione vanilla ho anche dovuto impostare una password per l'utente postgres, sudo su - postgres psql, \ password impostare una password. Quindi avviare una connessione predefinita da pdgadmin3 con nome utente postgres e la password impostata.
edencorbin,

1
E dove si trova quel file? Concesso, potrebbe essere necessario creare un elenco, poiché non sembra esserci coerenza tra le versioni. Immagino che corro a trovare su '/'.
JosephK,

1
Su Ubuntu-16.04 lo è /etc/postgresql/9.6/main/pg_hba.conf.
Mike O'Connor,

1
Come nuovo per psql, questo è di grande aiuto e dovrebbe essere la risposta accettata in quanto si rivolge a vari metodi di autenticazione
Vyrnach,

45

Semplicemente l'aggiunta del -h localhostbit era tutto mio necessario per funzionare


Sappiamo perché questo lo risolve?
Michael Pell,

Le impostazioni predefinite di postgresql non sono impostate ragionevolmente. Ormai potrebbero averlo risolto, non lo so. Ovviamente l'URL predefinito dovrebbe esserethis_computer = 'http://localhost'
boulder_ruby

15

È possibile 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:

15

Nel caso in cui nessuna delle soluzioni precedenti funzioni per te:

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

host    all             all             ::1/128                 password

mi ha permesso di accedere con successo.


Grazie Ethan. Gestisco Fedora 20 e sto affrontando lo stesso problema dell'OP. Dopo aver modificato IPV4 e IPV6 in password. La connessione è andata a buon fine.
Ibn Saeed,

1
Prego. Molte volte ho beneficiato di altri post quando ho riscontrato un problema di programmazione o di sistema. Sono contento di potermi restituire un po '.
Ethan Brown,

1
Questo mi ha salvato la vita su Fedora 32!
Rami,

12

Di tutte le risposte sopra, niente ha funzionato per me. Ho dovuto cambiare manualmente la password degli utenti nel database e all'improvviso 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 

In seguito mi ha aiutato qui, Joseph. Soprattutto, il comando di connessione alla fine per aiutarmi a testarlo. Inoltre, aggiungerei un riavvio del servizio Postgresql nel caso qualcuno si stia chiedendo (ma capisco che è implicito). Lo apprezzo molto!
Harlin,

10

Ho scoperto che dovevo installare un server di identità, in ascolto sulla porta 113.

sudo apt-get install pidentd
sudo service postgresql restart

E poi ident ha funzionato.


10

Hmmm ...

Se riesci a connetterti con il nome utente e la password in pgAdminIII ma non riesci a connetterti, psqlprobabilmente quei due programmi si stanno collegando al database in modo diverso.

[Se ci si connette a database diversi, provare innanzitutto a connettersi allo stesso database. Vedi sotto.]

Da PostgreSQL: Documentazione: 9.3: psql :

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

Se non stai eseguendo qualcosa di simile psql ... -h host_name ...e stai eseguendo Ubuntu, psqldovresti connetterti tramite un socket di dominio Unix, quindi PostgreSQL probabilmente non è configurato per consentire uno dei metodi di autenticazione della password per l' utente postgres .

Puoi testarlo 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 , vale a dire chiedere al sistema operativo il tuo nome utente per confermare che sei postgres .

Quindi è probabilmente il tuo pg_hba.conf file

Il percorso completo del file sarà simile a /etc/postgresql/9.3/main/pg_hba.conf . Puoi visualizzarlo per es sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Se si omette il nome host nel psqlcomando, si dovrebbe essere in grado di connettersi se si aggiunge la seguente voce al 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 sta includendo il nome host nel vostro psqlcomando, aggiungere questa voce, invece:

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

È necessario inserire la voce prima che qualsiasi altra voce venga abbinata per la connessione tramite psql . In caso di dubbi su dove inserirlo, inseriscilo prima della prima riga non commentata.

Maggiori informazioni su pg_hba.conf

Da PostgreSQL: Documentazione: 9.3: Il file pg_hba.conf [grassetto mio enfasi]:

Il primo record con un tipo di connessione , indirizzo client , database richiesto e nome utente corrispondenti viene utilizzato per eseguire l'autenticazione. Non esiste "fall-through" o "backup": se viene scelto un record e l'autenticazione fallisce, i record successivi non vengono considerati. Se nessun record corrisponde, l'accesso viene 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 sia 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!

2
in ritardo al gioco, ma, sul serio, grazie per esserti sforzato di spiegare le cose correttamente in modo che io capisca!
Jeffrey 'jf' Lim,

10

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


7

Il problema è ancora il tuo file pg_hba.conf. Questa riga: 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 secondo i 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 mappatura opzionale del nome utente). Questo metodo è supportato solo su connessioni locali.

Autenticazione 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 rispettivamente con hash MD5 e testo in chiaro.

Se sei preoccupato per gli attacchi "sniffing" della password, allora è preferibile md5. La password semplice dovrebbe sempre essere evitata, se possibile. 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 possa essere una scelta migliore se si dipende dall'utilizzo di SSL).

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


7

Per fedora26 e postgres9.6

Innanzitutto, accedi come utente root quindi inserisci in psql con i seguenti comandi

$ su postgres  

poi

$ psql

nel psqltrovare la posizione di hba_file ==> significapg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

nel file pg_hba.confcambia l'accesso dell'utente a questo

host all all 127.0.0.1/32 md5

6

la mia soluzione su PostgreSQL 9.3 su Mac OSX nella shell bash era usare per accedere alla sudocartella dei dati e quindi aggiungere le righe necessarie al pg_hba.conffile per consentire a tutti gli utenti di essere affidabili e di poter accedere. Questo è 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 <db_name> -U <user_name> -W

1
Questo va bene per il server di sviluppo, ma non lo consiglierei per un ambiente di produzione poiché non è più necessaria una password per connettersi al database con queste impostazioni.
Michael,


4

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

L'ordine di configurazione dell'autenticazione in pg_hba.conf è rilevante nel tuo caso, credo. Il file di configurazione predefinito include diverse righe in un'installazione vanilla. Queste impostazioni predefinite possono corrispondere alle condizioni dei tentativi di autenticazione con conseguente autenticazione non riuscita. Non riesce indipendentemente dalla configurazione aggiuntiva aggiunta alla fine del file .conf.

Per verificare quale linea di configurazione viene utilizzata, assicurarsi di cercare il file di registro predefinito per i messaggi. Potresti vedere qualcosa del genere

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.


3

Un trucco al riguardo è 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 il gioco è fatto. Per sicurezza, poi vai e

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

quindi tornare indietro e impostare pg_hba.conf su

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

1

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 disponga solo di 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

0

Ho avuto lo stesso problema dopo aver seguito questo: installazione 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:

0

Se lo si utilizza su CentOS, potrebbe essere necessario ricaricare Postgres dopo aver effettuato le soluzioni sopra:

systemctl restart postgresql-9.3.service

Adesso è solo postgresql
Neil Chowdhury,

Il servizio postgresql di @NeilChowdhury ha ancora la versione nel nome del servizio, almeno nei sistemi Linux. Esegui questo comando per visualizzaresystemctl status | grep postgres
Ikrom,

0

Ho dovuto reinstallare pdAdmin per risolvere questo problema

brew cask reinstall pgadmin4

0

Per Windows se non si desidera modificare pb_gba.conf, ovvero lasciare il metodo su MD5 (impostazione predefinita), creare un nuovo utente, eseguendo questa query nello strumento Query in PGadmin PgAdmin

CREATE USER admin WITH PASSWORD 'secret'

quindi in cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

dove dbname è il tuo db in postgresql

inserisci qui la descrizione dell'immagine


-3

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

1
Ciò consente a chiunque di localhost di accedere come qualsiasi utente. Questo comportamento non è menzionato in nessun punto del collegamento. E sì, le pagine di informazioni di Debian contengono la stessa cosa.
rkapl,
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.