psql: FATAL: la autenticación de pares falló para el usuario

12

Acabo de instalar PostgreSQL 9.4 en Ubuntu 15.10.

  1. Creé un usuario con createuser -P myuser
  2. Creé una base de datos con createdb -O myuser mydatabase
  3. Edité pg_hba.confy agreguélocal mydatabase myuser md5
  4. Reinicié PostgreSQL con sudo service postgresql restart

El usuario myuser es solo un usuario de PostgresSQL y no tiene una cuenta de usuario en Ubuntu.

Cuando intento conectarme a la base de datos psql -W mydatabase myuser, falla psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL se está ejecutando ...

 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.

... y escuchando.

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

¿Qué debo hacer para conectarme con el usuario myuser a la base de datos mydatabase ?

Daniel
fuente

Respuestas:

16

En una nueva instalación de hace unos días, la segunda línea de mi pg_hba.confes

local   all             all              peer

Creo que este es el que hace que su intento de conexión falle.

El orden de las reglas es importante aquí: se considerará la primera que coincida con el método de acceso, el nombre de usuario, el nombre de la base de datos y el rango de IP de origen. Si falla, entonces no hay un segundo intento, por lo que el intento de conexión probablemente fallará. O, como dice la documentación :

No hay "caída" o "copia de seguridad": si se elige un registro y la autenticación falla, no se consideran los registros posteriores. Si ningún registro coincide, se deniega el acceso.

La solución es fácil: elimine la línea anterior si no planea usar la peerautenticación o mueva su regla específica por encima de esta.

dezso
fuente
Mover la línea funcionó.
Daniel
¿Cómo podríamos almacenar la contraseña usando una autenticación 'md5' para que no tengamos que escribirla una y otra vez ...?
sk
3

Primero ... compruebe que tiene las líneas que permiten al usuario myuser en pg_hba.conf. Por ejemplo:

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

O cualquier otra línea de permiso para IPV4 (e IPv6 si la usa) con: TIPO BASE DE DATOS MÉTODO DE DIRECCIÓN DEL USUARIO

Después de esta comprobación, ejecute el psql de la siguiente manera:

psql -h localhost -U myuser mydatabase

Y luego, la solicitud solicitada, ingrese la contraseña del usuario myuser.

Alvaro Neto
fuente
1
Y, por supuesto, elimine la autenticación de igual.
Alvaro Neto
Tengo una instancia que actualicé para permitir conexiones remotas, la dirección de escucha se establece '*'y agrega la host all all 0.0.0.0/0 md5regla. No tuve que eliminar la autenticación entre pares. Acabo de trabajar con el -h localhostparam. La mejor respuesta ya que lo más probable es que no tenga que tocar la configuración en una instalación estándar.
Mark Carpenter Jr