psql: FATAL: autenticazione peer non riuscita per l'utente


12

Ho appena installato PostgreSQL 9.4 su Ubuntu 15.10.

  1. Ho creato un utente con createuser -P myuser
  2. Ho creato un database con createdb -O myuser mydatabase
  3. Ho modificato pg_hba.confe aggiuntolocal mydatabase myuser md5
  4. Ho riavviato PostgreSQL con sudo service postgresql restart

L'utente myuser è solo un utente PostgresSQL e non ha un account utente su Ubuntu.

Quando provo a connettermi al database con psql -W mydatabase myuseresso non riesce psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL è in esecuzione ...

 postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

... e ascoltando.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

Cosa devo fare per connettermi con l'utente myuser al database mydatabase ?

Risposte:


16

In una nuova installazione di pochi giorni fa, la seconda riga della mia pg_hba.confè

local   all             all              peer

Credo che questo sia quello che fa fallire il tuo tentativo di connessione.

Qui l'ordine delle regole è importante: verrà preso in considerazione il primo che corrisponde al metodo di accesso, nome utente, nome del database e intervallo IP di origine. Se fallisce, non c'è un secondo tentativo, quindi il tentativo di connessione probabilmente fallirà. Oppure, come afferma la documentazione :

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.

La soluzione è semplice: rimuovere la riga sopra se non si prevede di utilizzare l' peerautenticazione o spostare la regola specifica sopra questa.


Lo spostamento della linea ha funzionato.
Daniel

Come potremmo memorizzare la password usando un'autorizzazione 'md5' in modo da non doverla digitare più volte ...?
sk

3

Innanzitutto ... controlla di avere le righe autorizzate all'utente myuser in pg_hba.conf. Per esempio:

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

O qualsiasi altra linea di autorizzazione per IPV4 (e IPv6 se si utilizza) con: TIPO DI DATABASE TIPO DI INDIRIZZO UTENTE

Dopo questo controllo, esegui psql come segue:

psql -h localhost -U myuser mydatabase

Quindi, al prompt richiesto, inserisci la password dell'utente myuser.


1
E, naturalmente, rimuovere l'autenticazione peer.
Alvaro Neto

Ho aggiornato un'istanza per consentire le connessioni remote, l'indirizzo di ascolto è impostato su '*'e ha aggiunto la host all all 0.0.0.0/0 md5regola. Non è stato necessario rimuovere l'autenticazione peer. Ho appena lavorato con il -h localhostparam. La migliore risposta poiché molto probabilmente non è necessario toccare la configurazione su un'installazione di serie.
Mark Carpenter Jr
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.