El usuario de PostgreSQL no puede conectarse al servidor después de cambiar la contraseña

10

Cumplí esto con 4 roles que creé:
después de cambiar la contraseña de un usuario en pgAdmin III usando la GUI (1), ese usuario ya no puede iniciar sesión.
pgAdmin III muestra mensaje de error:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

Mi sistema: Postgresql 9.2 en Ubuntu 12.04

¿Hay alguna forma de arreglar esto?

(1): inicie sesión con la cuenta postgres, haga clic con el botón derecho del usuario en Roles de inicio de sesión, vaya a la pestaña 'Definición' e ingrese la contraseña

Cao Minh Tu
fuente

Respuestas:

15

Es posible que este error de PgAdmin ( registro de cambios ) lo esté mordiendo :

2012-11-28 AV 1.16.1 Los controles de selección de fecha devuelven una marca de tiempo completa de manera predeterminada, lo que puede causar cambios de fecha involuntarios en los trabajos y las fechas de validez del rol. Ignora la parte del tiempo.

Se ha visto que este error establece fechas de caducidad de contraseña en el pasado, como 1/1/1970. En este caso, el mensaje de error al intentar conectarse no es diferente que con una contraseña incorrecta.

Puede verificar estas fechas de vencimiento con:

SELECT usename,valuntil FROM pg_user;

y si están equivocados, reinícielos con:

ALTER USER username VALID UNTIL 'infinity';

y actualice pgAdmin.

Daniel Vérité
fuente
¡Muchas gracias! Esto resolvió el problema. Cada vez que restablezco una contraseña de usuario, pgAdmin establece la validez hasta el 01-01-1970 para que el usuario no pueda iniciar sesión más.
Cao Minh Tu
¡lo tienes! malditos errores
Carter Cole
¿Cómo se supone que debo iniciar sesión en psql? Ese es el rol que acabo de actualizar.
ericpeters0n
1
@ ericpeters0n: cambiar temporalmente el método de autenticación trusto peeren el pg_hba.confarchivo de esta cuenta.
Daniel Vérité
Gracias, lo solucioné. Para aquellos que vienen después, la "confianza" significa que: una vez que haya reiniciado postgres, puede ejecutar psql sin autenticación de contraseña si es un usuario con el mismo nombre que un usuario privilegiado (por ejemplo, nombre de usuario 'postgres'). Entonces, 'su - postgres psql' le permitirá iniciar sesión y corregir la contraseña o la fecha válida.
ericpeters0n
3

Lo más sencillo es iniciar sesión con psql o pgAdmin y

ALTER USER sam WITH PASSWORD 'new_password';

Ahora, si no puede iniciar sesión con una cuenta de superusuario, puede recuperarlo alterando la configuración de pg_hba.conf para este usuario y volver a cargar la configuración (a veces encuentro que esto requiere reiniciar el servidor, pero no estoy seguro de por qué).

Lo que puede hacer es agregar una línea que le permita iniciar sesión usando el método de identificación (igual en 9.2) (si puede usar una cuenta del sistema local con el mismo nombre que el usuario) para conexiones locales para el usuario, o (si eso no es posible) establecido en "confianza" (¡muy temporalmente!). Si usa la confianza, retroceda lo antes posible, ya que esto significa "¡confíe en que el usuario es quien dice!" y, en consecuencia, es peligroso dejar esta configuración habilitada fuera de las necesidades inmediatas de recuperación.

Una vez que haya iniciado sesión, puede restablecer la contraseña anterior.

Chris Travers
fuente
¿No debería pgAdmin ejecutar el mismo comando?
dezso
(notando que dije psql o pgAdmin. ¿Qué puedo hacer para aclararlo?)
Chris Travers
No, no, solo pensé que cambiar las contraseñas en la GUI hace lo mismo. Si lo hace, no puedo imaginar qué podría salir mal.
dezso
¿Qué puede salir mal? Errores tipográficos en la contraseña para empezar ...
Chris Travers
¿No se puede simplemente volver a establecer la contraseña una vez que haya iniciado sesión como postgres?
dezso
2

Para la variante de Windows: también experimenté este desagradable error debido a pgAdmin para mi instalación de Windows x64 de la versión 9.2. Dejó mi producción paralizada.

En la carpeta C:\Program Files\PostgreSQL\9.2\datao C:\Program Files (x86)\PostgreSQL\9.**x**\data, encontrará el archivo de texto pg_hba.conf .

Encuentra las siguientes líneas:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

y cambie MÉTODO md5 a "confianza" como este:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

Desde el Windows>Runtipo "services.msc" y [enter] encuentre la instancia correcta de PostgreSQL y reiníciela.

¡Su seguridad de base de datos ahora está completamente abierta! Preste atención a la advertencia para devolverlo a md5 después de cambiar el tiempo de vencimiento de la contraseña del usuario para decir el año 2099 para todos los usuarios relevantes.

Hoang Do
fuente
1

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 localizarlo.

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.

ACTUALIZACIÓN 2016-10-14:

En Ubuntu, el nombre de archivo necesario es /etc/postgresql/9.5/main/pg_hba.conf. Solo para pruebas locales , modifíquelo para que se vea así:

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

Las dos líneas con MÉTODO "confianza" son nuevas. Le permiten conectarse sin un nombre de usuario / contraseña.

Cuando finalice, deberá reiniciar el servidor a través de:

sudo systemctl restart postgresql 
Alan Thompson
fuente
Para pg_hba.confque surta efecto, solo necesita una recarga, no un reinicio. Además, su sugerencia parece incompleta, ya que no está claro cómo resolvería el problema al final.
dezso
1

Acabo de tener el mismo problema y resultó que tenía varios usuarios con el mismo nombre (diferentes casos). Una vez que fusioné la propiedad y eliminé una, al menos estaba claro. Dependiendo del método de conexión, el caso no se transfirió necesariamente para la autenticación.

Jorge
fuente