Mensaje de error de Postgres: FATAL: Error de autenticación de identidad para el usuario "..."

26

Digamos que estás viendo este mensaje:

FATAL:  Ident authentication failed for user "..."

¿Cuáles son las causas de este mensaje de error?

Steve Bennett
fuente

Respuestas:

36

Significa que Postgres está intentando autenticar a un usuario usando el protocolo Ident, y no puede. Ident auth funciona así:

  • Tiene el rol de base de datos 'foo' en la base de datos 'db'
  • Su pg_hba.confarchivo (in /etc/postgres-something/main) define 'Ident' como el protocolo para conectarse a la base dbde datos para los usuarios que se conectan desde ciertos hosts
  • El nombre de usuario de Unix que hace la conexión es 'foo'
  • Un servidor Ident que se ejecuta en la máquina desde la que se conecta el usuario confirma que su nombre de usuario realmente es 'foo'

Posibles causas y soluciones:

  1. No hay ningún servidor Ident ejecutándose en la máquina desde la que intenta conectarse. Pruebe esto intentando conectarse a él en el puerto 113. Si eso falla, instale un servidor Ident (por ejemplo, sudo apt-get install oidentd).
  2. Hay un servidor Ident, pero no hay una función de base de datos que coincida con el nombre con el que está intentando conectarse ('foo' en el ejemplo anterior). Así que créelo conectándose de alguna manera a la base de datos con derechos de superusuario y hágalo CREATE ROLE foo. Alternativamente, agregue una entrada a /etc/postgresql/.../main/pg_ident.conf.
  3. Quizás el nombre de usuario del shell no coincida con el rol de la base de datos. Puede probar esto conectándose al servidor Ident mientras se realiza una conexión y pasando los números de puerto correctos.
  4. Tal vez realmente quieras conectarte con una contraseña , no con Ident. Edite el pg_hba.confarchivo adecuadamente. Por ejemplo, cambiar:

    host all all 127.0.0.1/32 ident
    

    a

    host all all 127.0.0.1/32 md5
    
Steve Bennett
fuente
2
Para fedora, el archivo está en/var/lib/psql/data
Anwar
No creo que a nadie le interese responder por qué Postgres usa 'ident' como inicio de sesión predeterminado.
icc97
¿Porque eso tenía sentido hace 20 años y nada cambia en * nix? :)
Steve Bennett
@ icc97, nada en esta respuesta indica que "ident" es el inicio de sesión predeterminado para Postgres; ¿De dónde sacaste esa idea? Hasta donde sé, el nombre de rol de superusuario predeterminado en un clúster de Postgres es "postgres".
Comodín el
9

No estoy seguro de las causas, pero esto me lo arregló:

en pg_hba.conf

cambiar a esto:

host todos todos 127.0.0.1/32 md5

Error exacto: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

Jacktrades
fuente
1
cambiar "ident" -> "md5" lo hizo por mí
webwesen
3

En CentOS, agregue la siguiente línea a /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

Y comentar las otras entradas.

Por supuesto, esta configuración no es segura, pero si solo estás jugando en una VM de desarrollo como yo, entonces probablemente esté bien ...

XåpplI'-I0llwlg'I -
fuente
0

Si aún no lo ha intentado, revise su archivo pg_hba.conf. Se llamará algo así como /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); puede que tenga que usar 'find / -name pg_hba.conf' para ubicarlo.

Al final del archivo, cambie los valores de 'MÉTODO' a 'confianza' para las pruebas locales (consulte los documentos de postgres para obtener información completa). Reinicie la máquina para asegurarse de que todo esté limpio y se lean los nuevos parámetros.

Esperemos que esto cure tus problemas. Resolvió mis problemas en Fedora 20 con PostgreSQL 9.3.

Alan Thompson
fuente
No es necesario reiniciar toda la máquina al modificar las configuraciones de PostgreSQL. En su lugar, intente usar pg_ctl reloaddesde la consola o SELECT pg_reload_conf();cuando ejecute SQL como un usuario privilegiado.
benjwadams