psql: FATAL: Error de autenticación de identidad para el usuario "postgres"

372

He instalado PostgreSQL y pgAdminIII en mi caja Ubuntu Karmic.

Puedo usar pgAdminIII con éxito (es decir, conectar / iniciar sesión), sin embargo, cuando intento iniciar sesión en el servidor usando el mismo nombre de usuario / pwd en la línea de comando (usando psql), aparece el error:

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

¿Alguien ahora cómo resolver este problema?

morfeo
fuente
Esta publicación de stackoverflow funcionó para mí: stackoverflow.com/a/18664239/2110769
Andrea Araldo

Respuestas:

194

¿Estableció la configuración adecuada en pg_hba.conf?

Vea https://help.ubuntu.com/stable/serverguide/postgresql.html cómo hacerlo.

Frank Heikens
fuente
36
Esto no funciona para mi. ¡He pasado horas en eso! Todo lo que quiero hacer es ejecutar comandos psql en mi terminal. ¿Qué necesito para que el archivo se vea así?
Sean
54
@SeanA necesitas algo como 'sudo -u postgres psql'
JLarky
8
No te olvides de ';' al final de cada declaración en psql. Suena tonto pero sucede jeje.
omrsin
42
@Robert: "postgresql es el db más hostil para el usuario"? Pruebe Oracle algún día para obtener algo de perspectiva ... :)
mivk
55
Para aquellos que usan rieles, tuve que configurar pg_hba.conf y cambiar 'ident' a 'contraseña'. Cambiarlo a confianza no funcionó.
Abe Petrillo
412

Los siguientes pasos funcionan para una nueva instalación de postgres 9.1 en Ubuntu 12.04. (También funcionó para postgres 9.3.9 en Ubuntu 14.04).

Por defecto, postgres crea un usuario llamado 'postgres'. Iniciamos sesión como ella y le damos una contraseña.

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

Cierre sesión psqlescribiendo \qo ctrl+d. Luego nos conectamos como 'postgres'. La -h localhostparte es importante : le dice al psqlcliente que deseamos conectarnos usando una conexión TCP (que está configurada para usar autenticación de contraseña), y no por una conexión PEER (que no le importa la contraseña).

$ psql -U postgres -h localhost
Manav
fuente
13
Si configura PGHOST=localhostno necesita especificar la -hopción cada vez. Esto también funciona con otros pg_*comandos como pg_dump.
Sameer
1
Se documenta aquí: help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia
2
Esto era necesario para habilitar una instalación de Mediawiki en Debian con PostgreSQL.
mivk
2 años después, y también necesito hacer esto en una Mac .
Manav
1
mal porque hay un problema de seguridad, vea aquí: serverfault.com/questions/110154/…
Erdinc Ay
161

Editar el archivo /etc/postgresql/8.4/main/pg_hba.confy reemplazar idento peerpor cualquiera md5o trust, dependiendo de si desea que se pida una contraseña en su propia computadora o no. Luego vuelva a cargar el archivo de configuración con:

/etc/init.d/postgresql reload
Danny Milosavljevic
fuente
44
un comando reiniciar postgresql: /etc/init.d/postgresql restart
Tyler Long
14
¿Por qué un reinicio cuando una recarga es todo lo que necesitas?
Frank Heikens
En este caso: "/etc/init.d/postgresql-8.4 reload"
shaytac
1
este aquí funcionó para mí. El cambio de par a md5 fue suficiente.
CD de Jonatas
1
OK, soy un novato postgresql, pero debo informar que solo restartfuncionó para mí, no reload--- después de los cambios a /etc/postgresql/9.5/main/pg_hba.conf(cambio peera trust).
Mike O'Connor
91

Recibes este error porque estás fallando la autenticación del cliente. Según el mensaje de error, probablemente tenga la configuración predeterminada de postgres, que establece el método de autenticación del cliente en "IDENT" para todas las conexiones de PostgreSQL.

Definitivamente debería leer la sección 19.1 Autenticación del cliente en el manual de PostgreSQL para comprender mejor la configuración de autenticación disponible (para cada registro en pg_hba.conf ), pero aquí está el fragmento relevante para ayudar con el problema que está teniendo (del manual de la versión 9.5 ):

confiar

Permitir la conexión incondicionalmente. Este método permite que cualquiera que pueda conectarse al servidor de base de datos PostgreSQL inicie sesión como cualquier usuario PostgreSQL que desee, sin la necesidad de una contraseña o cualquier otra autenticación. Consulte la Sección 19.3.1 para más detalles.

rechazar

Rechaza la conexión incondicionalmente. Esto es útil para "filtrar" ciertos hosts de un grupo, por ejemplo, una línea de rechazo podría bloquear la conexión de un host específico, mientras que una línea posterior permite que se conecten los hosts restantes en una red específica.

md5

Solicite al cliente que proporcione una contraseña con doble hash MD5 para la autenticación. Consulte la Sección 19.3.2 para más detalles.

contraseña

Solicite al cliente que proporcione una contraseña sin cifrar para la autenticación. Dado que la contraseña se envía en texto claro a través de la red, esto no debe usarse en redes no confiables. Consulte la Sección 19.3.2 para más detalles.

gss

Use GSSAPI para autenticar al usuario. Esto solo está disponible para conexiones TCP / IP. Consulte la Sección 19.3.3 para más detalles.

sspi

Use SSPI para autenticar al usuario. Esto solo está disponible en Windows. Consulte la Sección 19.3.4 para más detalles.

ident

Obtenga el nombre de usuario del sistema operativo del cliente contactando al servidor de identificación en el cliente y verifique si coincide con el nombre de usuario de la base de datos solicitada. La autenticación de identidad solo se puede usar en conexiones TCP / IP. Cuando se especifica para conexiones locales, se utilizará la autenticación de pares. Consulte la Sección 19.3.5 para más detalles.

mirar

Obtenga el nombre de usuario del sistema operativo del cliente del sistema operativo y verifique si coincide con el nombre de usuario de la base de datos solicitada. Esto solo está disponible para conexiones locales. Consulte la Sección 19.3.6 para más detalles.

ldap

Autenticar usando un servidor LDAP. Consulte la Sección 19.3.7 para más detalles.

radio

Autenticar usando un servidor RADIUS. Consulte la Sección 19.3.8 para más detalles.

cert

Autenticar usando certificados de cliente SSL. Consulte la Sección 19.3.9 para más detalles.

pam

Autentíquese utilizando el servicio Módulos de autenticación enchufables (PAM) proporcionados por el sistema operativo. Consulte la Sección 19.3.10 para más detalles.

Entonces ... para resolver el problema que estás experimentando, puedes hacer uno de los siguientes:

  1. Cambie los métodos de autenticación definidos en su pg_hba.conf archivo a trust, md5o password(según sus necesidades de seguridad y simplicidad) para los registros de conexión local que haya definido allí.

  2. Actualice pg_ident.confpara asignar los usuarios de su sistema operativo a los usuarios de PostgreSQL y otorgarles los privilegios de acceso correspondientes, según sus necesidades.

  3. Deje en paz la configuración de IDENT y cree usuarios en su base de datos para cada usuario del sistema operativo al que desee otorgar acceso. Si un usuario ya está autenticado por el sistema operativo y ha iniciado sesión, PostgreSQL no requerirá más autenticación y otorgará acceso a ese usuario en función de los privilegios (roles) que se le asignen en la base de datos. Esta es la configuración por defecto.

Nota: La ubicación de pg_hba.confy pg_ident.confdepende del sistema operativo.

Leo Bedrosian
fuente
44
Para mí, esta es la mejor respuesta. Cuando conozca todas estas opciones, puede modificar fácilmente la configuración. Y especialmente cuando está en la máquina Dev puede simplemente establecer 'ident' para todas las entradas para evitar perder su tiempo. Gracias
venkatareddy
1
Esto también fue útil para mí. En mi caso, el archivo pg_hba.conf se configuró en igual, lo cambié a contraseña. Tenga en cuenta que desde una instalación de vainilla también tuve que establecer una contraseña para el usuario de postgres, sudo su - postgres psql, \ password establecer una contraseña. Luego, inicie una conexión predeterminada desde pdgadmin3 con el nombre de usuario postgres y la contraseña que configuró.
edencorbin
1
¿Y dónde se encuentra ese archivo? De acuerdo, es posible que deba hacer una lista, ya que parece que no hay coherencia entre las versiones. Supongo que solo ejecutaré find en '/'.
JosephK
1
En Ubuntu-16.04 es /etc/postgresql/9.6/main/pg_hba.conf.
Mike O'Connor
1
Como alguien que es nuevo en psql, esta es una gran ayuda y debería ser la respuesta aceptada, ya que atiende a varios métodos de autenticación
Vyrnach
45

Simplemente agregar el -h localhostbit fue todo lo mío necesario para trabajar

boulder_ruby
fuente
¿Sabemos por qué esto lo soluciona?
Michael Pell
Los valores predeterminados de postgresql no se establecen razonablemente. Puede que ya lo hayan arreglado, no lo sé. Obviamente, la URL predeterminada debería serthis_computer = 'http://localhost'
boulder_ruby
15

Puede establecer la variable de entorno 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:
Ivan Trechyokas
fuente
15

En caso de que nada de lo anterior funcione para usted:

he realizado bastantes instalaciones de Postgres, pero hoy me quedé desconcertado en un sistema RedHat 6.5 (instalando Postgres 9.3). Mi configuración típica de hba.conf que Aron muestra arriba no funcionó. Resultó que mi sistema estaba usando IPV6 e ignorando la configuración de IPV4. Agregando la línea:

host    all             all             ::1/128                 password

me permitió iniciar sesión con éxito.

Ethan Brown
fuente
Gracias Ethan Estoy ejecutando Fedora 20 y tengo el mismo problema que el OP. Después de cambiar el IPV4 e IPV6 a contraseña. La conexión fue exitosa.
Ibn Saeed
1
Eres muy bienvenido. Muchas veces me he beneficiado de otras publicaciones cuando encuentro un problema de programación o sistema. Me alegra haber podido devolver un poco.
Ethan Brown
1
¡Esto me salvó la vida en Fedora 32!
Rami
12

De todas las respuestas anteriores, nada funcionó para mí. Tuve que cambiar manualmente la contraseña de los usuarios en la base de datos y de repente funcionó.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Usé la siguiente configuración:

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 conexión es exitosa finalmente para el siguiente comando:

psql -U produser -d dbname -h localhost -W 
Joseph Persie
fuente
Después de esto me ayudó aquí, Joseph. Especialmente, el comando de conexión al final para ayudarme a probarlo. Además, agregaría un reinicio del servicio Postgresql en caso de que alguien se pregunte (pero entiendo que está implícito). Lo aprecio mucho!
Harlin
10

Descubrí que tenía que instalar un servidor de identidad, que escucha en el puerto 113.

sudo apt-get install pidentd
sudo service postgresql restart

Y luego ident funcionó.

Dustin Kirkland
fuente
10

Hmmm ...

Si puede conectarse con el nombre de usuario y la contraseña en pgAdminIII pero no puede conectarse con psql entonces esos dos programas probablemente se estén conectando a la base de datos de manera diferente.

[Si se está conectando a diferentes bases de datos, primero intente conectarse a la misma base de datos. Vea abajo.]

Desde PostgreSQL: Documentación: 9.3: psql :

Si omite el nombre de host, psql se conectará a través de un socket de dominio Unix a un servidor en el host local, o mediante TCP / IP a localhost en máquinas que no tienen sockets de dominio Unix.

Si no está ejecutando algo así psql ... -h host_name ..., y está ejecutando Ubuntu, psqldebería conectarse a través de un socket de dominio Unix, por lo que PostgreSQL probablemente no esté configurado para permitir uno de los métodos de autenticación de contraseña para el usuario de postgres .

Puede probar esto ejecutando:

sudo -u postgres psql

Si lo anterior funciona, es probable que su servidor esté configurado para usar autenticación de pares para conexiones locales por parte del usuario postgres , es decir, pedirle al sistema operativo su nombre de usuario para confirmar que usted es postgres .

Entonces, probablemente sea su archivo pg_hba.conf

La ruta completa del archivo será algo así como /etc/postgresql/9.3/main/pg_hba.conf . Puede verlo por ej sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Si está omitiendo el nombre de host en su psqlcomando, debería poder conectarse si agrega la siguiente entrada a su archivo pg_hba.conf :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[Las líneas comentadas en el archivo pg_hba.conf comienzan con# .]

Si está incluido el nombre de host en su psqlcomando, agregue esta entrada en su lugar:

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

Debe colocar la entrada antes de que cualquier otra entrada coincida con su conexión a través de psql. Si tiene dudas sobre dónde colocarlo, simplemente colóquelo antes de la primera línea sin comentarios.

Más acerca de pg_hba.conf

Desde PostgreSQL: Documentación: 9.3: El archivo pg_hba.conf [negrita énfasis]:

El primer registro con un tipo de conexión , dirección de cliente , base de datos solicitada y nombre de usuario coincidentes se utiliza para realizar la autenticació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.

Tenga en cuenta que los registros no coinciden con el método de autenticación. Entonces, si su archivo pg_hba.conf contiene la siguiente entrada:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Entonces no podrás conectarte a través de:

psql -u postgres

A menos que una de estas entradas esté en su archivo pg_hba.conf sobre la entrada anterior:

# 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!
Kenny Evitt
fuente
2
tarde al juego, pero, en serio, ¡gracias por hacer el esfuerzo de explicar las cosas correctamente para que yo entienda!
Jeffrey 'jf' Lim
10

En mi caso, solución aquí: (para las personas interesadas) inicie sesión en postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

Saludos

VanThaoNguyen
fuente
7

El problema sigue siendo su archivo pg_hba.conf. Esta línea: puede encontrar este archivo en / etc / postgres / varion / main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Estas son breves descripciones de ambas opciones según los documentos oficiales de PostgreSQL sobre métodos de autenticación.

Autenticación entre pares

El método de autenticación de pares funciona obteniendo el nombre de usuario del sistema operativo del cliente del núcleo y usándolo como el nombre de usuario permitido de la base de datos (con asignación de nombre de usuario opcional). Este método solo es compatible con conexiones locales.

Autenticación de contraseña

Los métodos de autenticación basados ​​en contraseña son md5 y contraseña. Estos métodos funcionan de manera similar, excepto por la forma en que se envía la contraseña a través de la conexión, a saber, hash MD5 y texto sin cifrar respectivamente.

Si le preocupan los ataques de "olfateo" de contraseñas, entonces se prefiere md5. La contraseña simple siempre debe evitarse si es posible. Sin embargo, md5 no se puede usar con la función db_user_namespace. Si la conexión está protegida por encriptación SSL, la contraseña se puede usar de forma segura (aunque la autenticación de certificado SSL podría ser una mejor opción si se depende de usar SSL).

Después de modificar este archivo, no olvide reiniciar su servidor PostgreSQL. Si estás en Linux, eso seríasudo service postgresql restart.

Suneel Kumar
fuente
7

Para fedora26 y postgres9.6

Primero, inicie sesión como usuario root y luego ingrese a psql con los siguientes comandos

$ su postgres  

entonces

$ psql

en psqlbuscar ubicación de hba_file ==> significapg_hba.conf

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

en el archivo pg_hba.confcambia el acceso del usuario a este

host all all 127.0.0.1/32 md5
mohsen.nour
fuente
6

mi solución en PostgreSQL 9.3 en Mac OSX en bash shell fue usar sudopara ir a la carpeta de datos y luego agregar las líneas necesarias al pg_hba.confarchivo para permitir que todos los usuarios sean de confianza y puedan iniciar sesión. Esto es lo que hice :

# 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
Aaron Lelevier
fuente
1
Esto está bien para el servidor de desarrollo, pero no lo recomendaría para un entorno de producción ya que ya no necesita una contraseña para conectarse a la base de datos con esta configuración.
Michael
4

He pasado más tiempo resolviendo este error que me gustaría admitir.

El orden de configuración de autenticación en pg_hba.conf es relevante en su caso, creo. El archivo de configuración predeterminado incluye varias líneas en una instalación estándar. Estos valores predeterminados pueden coincidir con las condiciones de sus intentos de autenticación, lo que resulta en una falla de autenticación. Falla independientemente de la configuración adicional agregada al final del archivo .conf.

Para verificar qué línea de configuración se utiliza, asegúrese de buscar mensajes en el archivo de registro predeterminado. Puede que veas algo como esto

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"

Resulta que esta línea predeterminada está causando el rechazo.

host    all             all             127.0.0.1/32            ident

intenta comentarlo.

Jeremy Whiting
fuente
3

Un truco para esto es editar pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

A temporalmente

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

En este punto ya has terminado. Por seguridad, entonces ve y

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

luego regrese y configure pg_hba.conf nuevamente en

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

Tuve un problema similar y lo arreglé en pg_hba.conf al eliminar todos los métodos de identificación , incluso para la dirección IP6 (a pesar de que solo tengo IP4 en la máquina).

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
TMa
fuente
0

Tuve el mismo problema después de seguir esto: configuración de PostgreSQL para el desarrollo de Rails en Ubuntu 12.04

Intenté las otras respuestas pero todo lo que tenía que hacer era: "config / database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:
Daniel
fuente
0

Si lo está utilizando en CentOS, es posible que deba volver a cargar postgres después de realizar las soluciones anteriores:

systemctl restart postgresql-9.3.service
Jaswinder
fuente
Ahora es solopostgresql
Neil Chowdhury
El servicio @NeilChowdhury postgresql todavía tiene una versión en el nombre del servicio, al menos en los sistemas Linux. Ejecute este comando para versystemctl status | grep postgres
Ikrom
0

Tuve que reinstalar pdAdmin para resolver este problema

brew cask reinstall pgadmin4
Sofia Khwaja
fuente
0

Para Windows, si no desea editar pb_gba.conf, es decir, dejar el método en MD5 (predeterminado), cree un nuevo usuario, ejecutando esta consulta en la herramienta de consulta en PGadmin PGadmin

CREATE USER admin WITH PASSWORD 'secret'

luego en cmd

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

donde dbname es tu db en postgresql

ingrese la descripción de la imagen aquí

Ajay Tom George
fuente
-3

Esto funcionó para mí: 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
En g. M.D'Ambrosio
fuente
1
Esto permite que cualquier persona de localhost inicie sesión como cualquier usuario. Este comportamiento no se menciona en ninguna parte del enlace. Y sí, las páginas de información de Debian contienen lo mismo.
rkapl