Puede que se nos <olvide> la contraseña de Super Usuario de PostgreSQL <postgres> y no seamos capaces de realizar ninguna operación sobre ella. Esto que parece un serio problema no será tanto si cumplimos los siguientes requisitos:
- Tener acceso a la máquina que tiene instalado el servidor <por ssh, físico, etc ..>
- Tener acceso con el usuario que ejecuta el servidor PostgreSQL <normalmente postgres>
Asumiendo que sí los tenemos, y ya estamos conectados a la máquina que tiene el servidor con el usuario que la ejecuta, primero debemos editar el archivo de configuración <$PGDATA/pg_hba.conf> y permitir el acceso local sin contraseña, es decir, trust. Para ello, buscaremos la entrada -si la tenemos-
#"local" is for Unix domain socket connections onlyY la sustituiremos por
local all all md5
# "local" is for Unix domain socket connections onlyGuardaremos y saldremos del editor. A continuación, deberemos llamar a postgres para que vuelva a leer los archivos de configuración, para ello utilizaremos el comando <pg_ctl> con la opción <reload>
local all all trust
$ pg_ctl reloadAhora, nos conectaremos a postgres utilizando el comando <psql> y podremos cambiar la contraseña, utilizando la instrucción SQL <ALTER USER nombre WITH PASSWORD 'password';>
se ha enviado una señal al servidor
$ psqlPor último, sólo nos queda revertir el cambio en el archivo <$PGDATA/pg_hba.conf> y llamar a <pg_ctl> para que vuelva a leer la configuración.
psql (8.4.2)
Digite «help» para obtener ayuda.
postgres=# ALTER USER postgres WITH PASSWORD 'nueva_pass';
ALTER ROLE
postgres=# \q
$ vi /var/postgres/8.4/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all md5
:wq
$ pg_ctl reloadConclusión
se ha enviado una señal al servidor
$ psql
Contraseña:
psql (8.4.2)
Digite «help» para obtener ayuda.
postgres=# \q
Como podéis ver, si tenemos acceso a la máquina la tarea resulta realmente sencilla. Si no fuese así, el tema se complica y no es en este post cómo explicarlo.
Referencias
Perdona pero eso no es recuperar una contraseña, es reestablecerla. Y hay veces en las que realmente resultaría útil poder recuperarla, por ejemplo cuando hay más sistemas interconectados con esa base de datos y ese usuario y resulta inviable hacer un cambio de clave por no tener acceso a dichos sistemas.
ResponderEliminarHola anónimo,
EliminarSi, es cierto, es "restablecer la contraseña" de PostgreSQL en vez de "recuperarla". El problema es que no es posible saber cual es la contraseña que había antes en formato "texto plano".
Pero, como bien dices, tal vez debería ser el título "restablecer contraseña de postgres"
Un Saludo y gracias por la info
chacra
ResponderEliminarHola Urko,
ResponderEliminarLogré restablecer la contraseña del super usuario de postgres de mi servidor. Se me olvidó la que puse durante la instalación, y estaba pasando por un gran aprieto. Gracias por compartir lo que sabes. Te agradecemos mucho,
El Tim Cuba.
Hola,
EliminarMe alegro que te ayudase! Lo cierto, es que yo creo que debemos compartir lo que sabemos "con todos", así también aprendemos "todos".
Un Saludo,
Urko
Mil gracias! Solo me surgió un problema a la hora de ejecutar el comando psql, pero encontré la solución aqui:
ResponderEliminarhttp://stackoverflow.com/questions/11919391/postgresql-error-fatal-role-username-does-not-exist