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.