web-dev-qa-db-fra.com

Mot de passe administrateur oublié sur Postgres (installation de Windows), impossible de réinitialiser

J'ai une installation Windows PostgreSQL.

Selon certains articles, aucun mot de passe par défaut n'est défini pour l'utilisateur 'postgres', mais je ne peux pas me connecter en utilisant une chaîne de mot de passe vide.

Je reçois cette exception lorsque j'essaie de me connecter:

Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"

L'astuce la plus pertinente était la suivante: https://stackoverflow.com/a/25943227/1005607

Open  pg_hba.conf  
Change md5 -> TRUST  
then restart PgAdmin.

J'ai essayé et redémarré PGAdmin mais il me demande toujours le mot de passe lorsque j'essaie de me connecter:

enter image description here

Le gestionnaire de tâches de Windows montre que certains processus PostgreSQL sont en cours d'exécution. Je ne peux pas les éteindre.

J'ai essayé cela et ça a échoué:

pg_ctl restart

ERROR: 
pg_ctl: no database directory specified and environment variable PGDATA unset

psql.exe postgres
Password: (none)
ERROR:
psql: fe_sendauth: no password supplied

Comment réinitialiser le mot de passe par défaut de l'utilisateur 'postgres'?

9
gene b.

Sur la base de la réponse d'AK47 et de quelques informations supplémentaires, je l'ai corrigé en procédant comme suit,

1) Arrêtez Postgres s'il est en cours d'exécution, ligne de commande ci-dessous. Besoin de lui donner le répertoire 'data'. Dans mon cas, C:\PostgreSQL\data

pg_ctl -D C:\PostgreSQL\data stop

2) Modifiez le fichier pg_hba.conf (il est également dans le répertoire\data) comme suit:

Comme l'a écrit AK40, c suspendre toutes les références MD5 à la confiance, par ex.

# 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
# Allow replication connections from localhost, by a user with the
# replication privilege.
Host    replication     all             127.0.0.1/32            trust
Host    replication     all             ::1/128                 trust

3) Maintenant, lancez

psql -U postgres

4) Dans l'invite de commande PG qui apparaît, tapez,

ALTER USER Postgres WITH PASSWORD '<newpassword>';

5) Enregistrez ceci en tapant wq enter pour quitter l'invite PG

6) Maintenant, lancez Postgres

pg_ctl -D C:\PostgreSQL\data start

7) Pourrait vouloir annuler le MD5 -> Trust changer plus tard dans le pg_hba.conf.

9
gene b.

Mettez à jour votre pg_hba.conf fichier pour autoriser les connexions locales approuvées

[root@server] vim pg_hba.conf
>> local all all         trust

puis redémarrez votre serveur PostgreSQL

[user@machine] pg_ctl -D C:\PostgreSQL\data restart    (Windows)
[root@server] service postgresql restart            (Linux)

à ce stade, vous pouvez vous connecter à votre serveur en tant qu'utilisateur postgres en utilisant une connexion locale sans avoir besoin de saisir un mot de passe (en omettant le -h paramètre lors de l'appel de la commande psql utilisera une connexion locale - si vous passez -h alors cela correspondra à la ligne Host all all 0.0.0.0/0 <method> dans votre pg_hba.conf fichier)

[root@server] psql -U postgres

Vous pouvez ensuite modifier le rôle d'utilisateur postgres et définir le mot de passe comme bon vous semble en utilisant la commande suivante dans le terminal psql

[psql] alter role postgres password <new_password>;

Une fois cela fait, vous pouvez redémarrer votre serveur PostgreSQL

[user@machine] pg_ctl -D C:\PostgreSQL\data restart     (Windows)
[root@server] service postgresql restart             (Linux)

et à ce stade, votre mot de passe doit être changé pour le nouveau mot de passe

3
AK47