postgresql - sirve - psql: FATAL: Falló la autenticación de identificación para el usuario "postgres"
postgresql version (21)
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 conecten 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 a través de TCP / IP a localhost en máquinas que no tienen sockets de dominio Unix.
Si no está ejecutando algo como psql ... -h host_name ...
, y está ejecutando Ubuntu, psql
debería conectarse a través de un socket de dominio Unix, por lo que PostgreSQL probablemente no esté configurado para permitir una de las contraseñas Métodos de autenticación para el usuario postgres .
Puedes probar esto ejecutando:
sudo -u postgres psql
Si lo anterior funciona, su servidor probablemente esté configurado para usar la autenticación de pares para las conexiones locales por parte del usuario de postgres , es decir, pedirle al sistema operativo su nombre de usuario para confirmar que está postgres .
Así que es probablemente tu archivo pg_hba.conf
La ruta completa del archivo será algo así como /etc/postgresql/9.3/main/pg_hba.conf . Puede verlo, por ejemplo, sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
Si está omitiendo el nombre de host en su comando psql
, 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á incluyendo el nombre de host en su comando psql
, agregue esta entrada en su lugar:
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
psql
colocar la entrada antes de que otras entradas psql
para su conexión a través de psql
. Si tiene dudas sobre dónde colocarlo, simplemente póngalo antes de la primera línea sin comentarios.
Más sobre pg_hba.conf
De PostgreSQL: Documentación: 9.3: El archivo pg_hba.conf [negrita énfasis mío]:
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 directa" o "copia de seguridad": si se elige un registro y la autenticación falla, los registros posteriores no se consideran. Si no coincide el registro, se deniega el acceso.
Tenga en cuenta que los registros no coinciden con el método de autenticación. Por lo tanto, 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!
He instalado PostgreSQL y pgAdminIII en mi caja de Karmic de Ubuntu.
Puedo usar pgAdminIII correctamente (es decir, conectar / iniciar sesión), sin embargo, cuando intento iniciar sesión en el servidor con el mismo nombre de usuario / pwd en la línea de comandos (con psql), aparece el error
psql: FATAL: Ident authentication failed for user "postgres"
¿Alguien ahora cómo resolver este problema?
¿Estableciste la configuración adecuada en pg_hba.conf?
Vea https://help.ubuntu.com/stable/serverguide/postgresql.html cómo hacerlo.
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'';"
Utilicé los siguientes ajustes:
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
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 trabajó la identidad.
Edite el archivo /etc/postgresql/8.4/main/pg_hba.conf
y reemplace ident
o peer
por md5
o trust
, dependiendo de si desea solicitar una contraseña en su propia computadora o no. Luego vuelve a cargar el archivo de configuración con:
/etc/init.d/postgresql reload
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 de 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 de base de datos permitido (con asignación de nombre de usuario opcional). Este método solo se admite en 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 la contraseña se envía a través de la conexión, es decir, hash MD5 y texto claro respectivamente.
Si le preocupan los ataques de "sniffing" de contraseñas, entonces se prefiere md5. La contraseña simple siempre debe ser evitada si es posible. Sin embargo, md5 no se puede utilizar con la función db_user_namespace. Si la conexión está protegida por el cifrado SSL, la contraseña se puede usar de manera segura (aunque la autenticación del certificado SSL podría ser una mejor opción si una depende del uso de SSL).
Después de modificar este archivo, no olvide reiniciar su servidor PostgreSQL. Si está en Linux, ese sería el sudo service postgresql restart.
En caso de que ninguno de los anteriores te funcione:
He realizado bastantes instalaciones de Postgres, pero hoy quedé desconcertado en un sistema RedHat 6.5 (instalación de 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. Añadiendo la línea:
host all all ::1/128 password
me permitió iniciar sesión con éxito.
En mi caso, la 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
Esto me funcionó: 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
He pasado más tiempo resolviendo este error que quiero admitir.
El orden de configuración de la 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 de vainilla. 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 usa, asegúrese de revisar el archivo de registro predeterminado para los mensajes. Podrías ver 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 por defecto está causando el rechazo.
host all all 127.0.0.1/32 ident
Intenta comentarlo.
Los siguientes pasos funcionan para una instalación nueva 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''. Nos conectamos como ella, y le damos una contraseña.
$ sudo -u postgres psql
/password
Enter password: ...
...
Cierre la sesión de psql
escribiendo /q
o ctrl+d
. Entonces nos conectamos como ''postgres''. La parte -h localhost
es importante : le dice al cliente psql
que deseamos conectarnos utilizando una conexión TCP (que está configurada para usar la autenticación de contraseña), y no una conexión PEER (que no le importa la contraseña).
$ psql -U postgres -h localhost
Mi solución en PostgreSQL 9.3 en Mac OSX en bash shell fue usar sudo
para ir a la carpeta de datos, y luego agregar las líneas necesarias al archivo pg_hba.conf
para permitir que todos los usuarios sean confiables 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
Para fedora26 y postgres9.6.
Primero, inicia sesión como usuario root
Luego ingrese a psql por los siguientes comandos
$ su postgres
entonces escribe $ psql
en psql encuentra la ubicación de hba_file ==> significa pg_hba.conf
postgres = # show hba_file;
hba_file
/etc/postgresql/9.6/main/pg_hba.conf
(1 fila)
en el archivo pg_hba.conf cambiar el acceso del usuario a este
Alojar todo 127.0.0.1/32 md5
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:
Recibirá este error porque está 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 ayudarlo con el problema que tiene (del manual de la versión 9.5). ):
confianza
Permitir la conexión incondicionalmente. Este método permite a cualquier persona que pueda conectarse al servidor de base de datos PostgreSQL iniciar sesión como cualquier usuario de PostgreSQL que desee, sin la necesidad de una contraseña o cualquier otra autenticación. Vea 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 los hosts restantes en una red específica se conecten.
md5
Exigir al cliente que proporcione una contraseña doble hash MD5 para la autenticación. Vea la Sección 19.3.2 para más detalles.
contraseña
Exigir al cliente que proporcione una contraseña sin cifrar para la autenticación. Dado que la contraseña se envía en texto sin cifrar a través de la red, no debe usarse en redes que no sean de confianza. Vea la Sección 19.3.2 para más detalles.
gss
Utilice GSSAPI para autenticar al usuario. Esto solo está disponible para conexiones TCP / IP. Vea la Sección 19.3.3 para más detalles.
sspi
Utilice SSPI para autenticar al usuario. Esto solo está disponible en Windows. Vea la Sección 19.3.4 para más detalles.
ident
Obtenga el nombre de usuario del sistema operativo del cliente poniéndose en contacto con el 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 utilizar en conexiones TCP / IP. Cuando se especifique para las conexiones locales, se utilizará la autenticación de pares en su lugar. Vea 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 solicitado. Esto solo está disponible para conexiones locales. Vea la Sección 19.3.6 para más detalles.
ldap
Autenticar utilizando un servidor LDAP. Vea la Sección 19.3.7 para más detalles.
radio
Autenticar utilizando un servidor RADIUS. Vea la Sección 19.3.8 para más detalles.
cert
Autenticar utilizando certificados de cliente SSL. Vea la Sección 19.3.9 para más detalles.
pam
Autentíquese utilizando el servicio de módulos de autenticación conectables (PAM) proporcionado por el sistema operativo. Vea la Sección 19.3.10 para más detalles.
Entonces ... para resolver el problema que está experimentando, podría hacer una de las siguientes acciones:
Cambie los métodos de autenticación definidos en su archivo
pg_hba.conf
atrust
,md5
opassword
(según sus necesidades de seguridad y simplicidad) para los registros de conexión local que haya definido allí.Actualice
pg_ident.conf
para asignar los usuarios de su sistema operativo a los usuarios de PostgreSQL y otorgarles los privilegios de acceso correspondientes, según sus necesidades.Deje la configuración de IDENT sola 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 e iniciado sesión, PostgreSQL no requerirá una autenticación adicional 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.conf
y pg_ident.conf
depende del sistema operativo.
Si has hecho todo esto y aún no funciona, comprueba la caducidad de ese usuario:
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
Simplemente agregando el bit -h localhost
fue todo mío necesario para trabajar
Tuve el mismo problema después de seguir esto: Configuración de PostgreSQL para el desarrollo de Rails en Ubuntu 12.04
Probé las otras respuestas pero todo lo que tuve que hacer fue en: "config / database.yml"
development:
adapter: postgresql
encoding: unicode
database: (appname)_development
pool: 5
username: (username you granted appname database priviledges to)
password:
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
Un truco alrededor de 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 está hecho. Por seguridad, luego ve y
sudo -u postgres psql template1
ALTER USER postgres with encrypted password ''your_password'';
luego vuelve y configura pg_hba.conf de nuevo en
# Database administrative login by Unix domain socket
local all postgres md5