Olvidé la contraseña que ingresé durante la instalación de postgres

205

Olvidé o escribí mal (durante la instalación) la contraseña del usuario predeterminado de Postgres. Parece que no puedo ejecutarlo y aparece el siguiente error:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

¿Hay alguna forma de restablecer la contraseña o cómo creo un nuevo usuario con privilegios de superusuario?

Soy nuevo en Postgres y lo acabo de instalar por primera vez. Estoy tratando de usarlo con Rails y estoy ejecutando Mac OS X Lion.

hilarl
fuente
1
Todavía no puedo comentar las respuestas, así que tengo que hacerlo de esta manera. Hice lo que dijo SaiyanGirl, sin embargo, aún necesitaba ingresar una contraseña, que era 'postgres' para iniciar sesión, luego pude restablecer la contraseña
Pascale

Respuestas:

359
  1. busque el archivo pg_hba.conf; puede ubicarse, por ejemplo, en /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  2. Respaldarlo

    cp pg_hba.conf pg_hba.conf-backup

  3. coloque la siguiente línea (como la primera línea no comentada o como la única):

Para todas las ocurrencias a continuación (local y host), excepto la sección de replicación, si no tiene ninguna, debe cambiarse de la siguiente manera, no debe estar presente la autenticación MD5 o Peer.

local  all   all   trust
  1. reinicie su servidor PostgreSQL (por ejemplo, en Linux :)

    sudo /etc/init.d/postgresql restart

    Si el servicio (daemon) no comienza a informar en el archivo de registro:

    las conexiones locales no son compatibles con esta compilación

    deberías cambiar

    local all all trust

    a

    host all all 127.0.0.1/32 trust

  2. ahora puede conectarse como cualquier usuario. Conéctese como superusuario postgres(tenga en cuenta que el nombre de superusuario puede ser diferente en su instalación. En algunos sistemas se llama pgsql, por ejemplo ) .

    psql -U postgres

    o

    psql -h 127.0.0.1 -U postgres

    (tenga en cuenta que con el primer comando no siempre estará conectado con el host local)

  3. Restablecer contraseña ('reemplace my_user_name con postgres porque está restableciendo el usuario de postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. Restaura lo viejo, pg_hba.confya que es muy peligroso mantenerlo

    cp pg_hba.conf-backup pg_hba.conf

  5. reinicie el servidor para poder ejecutar con la caja fuerte pg_hba.conf

    sudo /etc/init.d/postgresql restart

Lecturas adicionales sobre ese archivo pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

Arsen7
fuente
9
¿Y luego empezar psql? Todavía me
piden
44
esta respuesta NO me funcionó, después de hacer el paso 3, el servicio no se iniciará, no lo sé, tal vez sea el sistema operativo (W8), simplemente no lo hará.
Scaramouche
3
Alguien para Windows?
Mahesha999
2
Tenga en cuenta el orden de las entradas en pg_hba.conf es importante. Si agrega "local all all trust" al final del archivo, no funcionará como espera, ya que los registros anteriores se compararán primero. Así que ponlo en la parte superior del archivo para tener lo que esperas.
Tagar
66
Si está en Windows con este error, siga desplazándose hasta la respuesta de @SaiyanGirl. Simplemente modifique las columnas MÉTODO de las entradas existentes para 'confiar', luego cámbielas nuevamente cuando haya terminado
sean.hudson
99

Al conectarse a postgres desde la línea de comando, no olvide agregar -h localhostcomo parámetro de línea de comando. Si no, postgres intentará conectarse usando el modo de autenticación PEER.

A continuación se muestra un restablecimiento de la contraseña, un inicio de sesión fallido con autenticación PEER y un inicio de sesión exitoso utilizando una conexión TCP.

# sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.

postgres=# \password
Enter new password:
Enter it again:
postgres=# \q

Defecto:

# psql -U postgres -W
Password for user postgres:
psql: FATAL:  Peer authentication failed for user "postgres"

Trabajando con -h localhost:

# psql -U postgres -W  -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=#
SaeX
fuente
77
Gracias por el consejo sobre la opción "-h", me ayudó.
Bunkerbewohner
Innecesario en Windows cmd.exe
Fabien Haddadi
1
La mejor respuesta para mac
Muhammad Umar
72

El archivo pg_hba.conf( C:\Program Files\PostgreSQL\9.3\data) ha cambiado desde que se dieron estas respuestas. Lo que funcionó para mí, en Windows, es abrir el archivo y cambiar el METHODde md5a trust:

# 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

Luego, usando pgAdmin III, inicié sesión sin contraseña y cambié la postgres'contraseña de usuario yendo aFile -> Change Password

SaiyanGirl
fuente
Esto no funciona porque PgAdmin todavía solicita la contraseña actual ... Restablecí a 'confianza' y reinicié PgAdmin. Todavía no se puede restablecer sin escribir la contraseña ACTUAL ...
gene b.
1
Una vez que cambie el método trust, puede seguir esto y modificar la contraseña en cmd
Gilad Green
12

Solo una nota, en Linux Simplemente puede ejecutar sudo su - postgrespara convertirse en el usuario de postgres y desde allí cambiar lo que se requiere usando psql.

Daniel
fuente
3
aún necesita la contraseña después de ejecutar psql
Snow
8
  1. Edite el archivo /etc/postgresql/<version>/main/pg_hba.confy busque la siguiente línea:

    local   all             postgres                                md5
  2. Edite la línea y cambie md5al final trusty guarde el archivo

  3. Recargue el servicio postgresql

    $ sudo service postgresql reload
  4. Esto cargará los archivos de configuración. Ahora puede modificar el postgresusuario iniciando sesión en el psqlshell

    $ psql -U postgres
  5. Actualiza la postgrescontraseña del usuario

    alter user postgres with password 'secure-passwd-here';
  6. Edite el archivo /etc/postgresql/<version>/main/pg_hba.confy trustvuelva a md5guardarlo.

  7. Recargue el servicio postgresql

    $ sudo service postgresql reload
  8. Verifique que el cambio de contraseña funciona

    $ psql -U postgres -W
Ray Hunter
fuente
¿Es tan difícil dar una solución de Windows? No todos usan Linux con sudo. ¿Cómo lo haría en Windows?
gen b.
7

Estaba teniendo este problema en Windows 10 y el problema en mi caso era que solo estaba ejecutando psql y estaba predeterminado al intentar iniciar sesión con mi nombre de usuario de Windows ("Nathan"), pero no había ningún usuario de PostgreSQL con ese nombre, y no me estaba diciendo eso.

Entonces, la solución fue ejecutar en psql -U postgreslugar de solo psql, y luego la contraseña que ingresé en la instalación funcionó.

Nathan Wailes
fuente
5

Agregando la respuesta para el usuario de Windows para la última versión de postgres (> 10),

Vaya a su ubicación de instalación de postgres y busque pg_hba.conf , lo encontrará en..\postgres\data\pg_hba.conf

Abra ese archivo con el bloc de notas, busque esta línea,

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

Cambia el método de md5 a confianza,

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

Ahora ve a tu SQL Shell (PSQL) y deja todo en blanco,

Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]: 

No pedirá contraseña esta vez, y se iniciará sesión,

Ahora corre esta línea, ALTER USER yourusername WITH SUPERUSER

Ahora puedes dejar el shell con \ q

Vuelva al archivo pg_hba.conf y cambie METHOD de trust a md5 nuevamente, y guárdelo.

Ahora inicie sesión con su nuevo usuario y contraseña y puede verificar \ du sus atributos.

Bidhan Majhi
fuente
1

Para la instalación de Windows, se crea un usuario de Windows. Y "psql" usa este usuario para la conexión al puerto. Si cambia la contraseña del usuario de PostgreSQL, no cambiará la de Windows. La línea de comandos que se muestra a continuación solo funciona si tiene acceso a la línea de comandos.

En su lugar, puede utilizar la aplicación GUI de Windows "c: \ Windows \ system32 \ lusrmgr.exe". Esta aplicación administra usuarios creados por Windows. Entonces ahora puede modificar la contraseña.

cpunky
fuente
1

Lo que hice para resolver el mismo problema fue:

Abra el archivo pg_hba.conf con el editor gedit desde la terminal:

sudo gedit /etc/postgresql/9.5/main/pg_hba.conf

Le pedirá contraseña. Ingrese su contraseña de inicio de sesión de administrador. Esto abrirá gedit con el archivo. Pegue la siguiente línea:

host  all   all  127.0.0.1/32  trust

justo debajo -

# Database administrative login by Unix domain socket

Guárdalo y ciérralo. Cierre el terminal y ábralo nuevamente y ejecute este comando:

psql -U postgres

Ahora ingresará a la consola psql. Ahora cambie la contraseña ingresando esto:

ALTER USER [your prefered user name] with password '[desired password]';

Si dice que el usuario no existe, en lugar de ALTERusarCREATE .

Por último, elimine esa línea determinada que pegó en pg_hba y guárdela.

Inconnu
fuente
0

Si estás en Windows, solo puedes ejecutar

net user postgres postgres

e inicie sesión en postgres con postgres / postgres como usuario / contraseña

ivofernandes
fuente
0

El archivo .pgpass en el directorio de inicio de un usuario o el archivo al que hace referencia PGPASSFILE puede contener contraseñas que se utilizarán si la conexión requiere una contraseña (y de lo contrario no se ha especificado ninguna contraseña). En Microsoft Windows, el archivo se denomina% APPDATA% \ postgresql \ pgpass.conf (donde% APPDATA% se refiere al subdirectorio de datos de la aplicación en el perfil del usuario).

Este archivo debe contener líneas del siguiente formato:

nombre de host: puerto: base de datos: nombre de usuario: contraseña

(Puede agregar un comentario recordatorio al archivo copiando la línea anterior y precediéndola con #.) Cada uno de los primeros cuatro campos puede ser un valor literal, o *, que coincide con cualquier cosa. Se utilizará el campo de contraseña de la primera línea que coincida con los parámetros de conexión actuales. (Por lo tanto, coloque primero entradas más específicas cuando use comodines). Si una entrada necesita contener: o \, escape de este carácter con. Un nombre de host de localhost coincide con las conexiones TCP (nombre de host localhost) y socket de dominio Unix (pghost vacío o el directorio de socket predeterminado) que provienen de la máquina local. En un servidor en espera, el nombre de la base de datos de replicación coincide con las conexiones de replicación de transmisión realizadas al servidor maestro. El campo de la base de datos es de utilidad limitada porque los usuarios tienen la misma contraseña para todas las bases de datos en el mismo clúster.

En sistemas Unix, los permisos en .pgpass deben prohibir cualquier acceso al mundo o grupo; lograr esto con el comando chmod 0600 ~ / .pgpass. Si los permisos son menos estrictos que esto, el archivo será ignorado. En Microsoft Windows, se supone que el archivo está almacenado en un directorio seguro, por lo que no se realiza ninguna verificación de permisos especiales.

rahulnikhare
fuente
Esto funcionó para mí, donde la ruta se expandió a C: \ Users \ <user> \ AppData \ Roaming \ postgresql \ pgpass.conf. También apaga y apaga el servidor PostgreSQL parece ayudar.
geodata
0

Si está ejecutando postgresql en mac os, intente lo siguiente :

  1. Edite el archivo pg_hba.conf

  2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

  3. Cambie el método "md5" para que todos los usuarios "confíen" cerca del final del archivo

  4. Encuentra el nombre del servicio

  5. ls / Library / LaunchDaemons

  6. Busque postgresql

  7. Detenga el servicio postgresql

  8. sudo launchctl stop com.edb.launchd.postgresql-9.2

  9. Inicie el servicio postgresql

  10. sudo launchctl start com.edb.launchd.postgresql-9.2

  11. Iniciar sesión psql como postgres

  12. psql -U postgres

  13. (no debería solicitar una contraseña debido a la configuración de "confianza")

  14. Restablezca la contraseña en la sesión de psql escribiendo

  15. ALTERAR USUARIO postgres con la contraseña 'secure-new-password';

  16. \ q
  17. entrar

  18. Edite el archivo pg_hba.conf

  19. Vuelva a cambiarlo a 'md5'

  20. Reiniciar servicios nuevamente

David
fuente
-1

Esto es lo que me funcionó en Windows:

Edite la ubicación del archivo pg_hba.conf en C: \ Archivos de programa \ PostgreSQL \ 9.3 \ data.

# IPv4 local connections: host all all 127.0.0.1/32 trust

Cambie el método de confianza a md5 y reinicie el servicio postgres en windows.

Después de eso, puede iniciar sesión usando el usuario de postgres sin contraseña usando pgadmin. Puede cambiar la contraseña usando Archivo-> Cambiar contraseña.

Si el usuario postgres no tiene privilegios de superusuario, entonces no puede cambiar la contraseña. En este caso, inicie sesión con otro usuario (pgsql) con acceso de superusuario y proporcione privilegios a otros usuarios haciendo clic derecho en los usuarios y seleccionando propiedades-> Privilegios de roles.

Chetan
fuente