Postgresql: l'authentification par mot de passe a échoué pour l'utilisateur «postgres»

432

J'ai installé PostgreSQL 8.4, le client Postgres et Pgadmin 3. L'authentification a échoué pour l'utilisateur "postgres" pour le client de la console et Pgadmin. J'ai tapé utilisateur comme "postgres" et mot de passe "postgres", car cela fonctionnait auparavant. Mais maintenant, l'authentification a échoué. Je l'ai fait avant quelques fois sans ce problème. Que devrais-je faire? Et que se passe-t-il?

psql -U postgres -h localhost -W
Password for user postgres: 
psql: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"
I159
la source
1
Dans mon cas, la connexion échoue parce que le mot de passe est trop complexe ...
JJD
3
Assurez-vous de lire tout le long de cette page. J'ai dû faire plusieurs choses pour que cela fonctionne. Tout d'abord, l' ALTERétape , puis l' édition de mon pg_hba.conffichier , puis le redémarrage de postgres .
elrobis
Assurez-vous également que vous n'avez pas deux instances Postgres en cours d'exécution: une sur Windows, une dans Docker. Docker ne m'a pas signalé que le port était déjà pris. Ainsi, l'outil connecté à la machine Windows Postgres, alors que dans les afficheurs Docker, tout allait bien.
koppor

Réponses:

751

Si je me souviens bien, l'utilisateur postgresn'a pas de mot de passe de base de données défini sur Ubuntu par défaut. Cela signifie que vous ne pouvez vous connecter à ce compte qu'en utilisant l'utilisateur du postgres système d'exploitation compte .

En supposant que vous avez rootaccès à la boîte, vous pouvez faire:

sudo -u postgres psql

Si cela échoue avec une database "postgres" does not existserreur, alors vous n'êtes probablement pas sur un serveur Ubuntu ou Debian :-) Dans ce cas, ajoutez simplement template1à la commande:

sudo -u postgres psql template1

Si l'une de ces commandes échoue avec une erreur, psql: FATAL: password authentication failed for user "postgres"vérifiez le fichier /etc/postgresql/8.4/main/pg_hba.conf: il doit y avoir une ligne comme celle-ci comme première ligne sans commentaire:

local   all         postgres                          ident

Pour les versions plus récentes de PostgreSQL, il identse peut quepeer . C'est OK aussi.

À l'intérieur du psqlshell, vous pouvez donner un mot de passe à l' utilisateur DB postgres :

ALTER USER postgres PASSWORD 'newPassword';

Vous pouvez quitter le psqlshell en tapant CtrlDou avec la commande\q .

Maintenant, vous devriez être en mesure de donner à pgAdmin un mot de passe valide pour le superutilisateur DB et il sera content aussi. :-)

AH
la source
C'est mieux, merci! psql fonctionne. Mais j'ai toujours des problèmes avec pgadmin3 - on m'a demandé un mot de passe pour mon utilisateur root du système. (étrange pour moi) pg_hba.conf comme vous le dites.
I159
J'ajouterais pour ensuite quitter la console en utilisant '\ q'. Ça m'a pris du temps pour trouver ça :)
hakunin
2
Notez que pg_hba.conf doit avoir l'utilisateur postgres défini identpour que les premières étapes fonctionnent. Si vous l'avez déjà défini sur md5 ou autre chose, vous ne pourrez pas vous connecter automatiquement.
Cerin
80
Très sympa. Pour les autres nouveaux utilisateurs, N'OUBLIEZ PAS LE SEMICOLON à la fin de la ligne ALTER USER.
itsols
3
@itsols Vous avez dit: "Très sympa. Aux autres nouveaux utilisateurs, N'OUBLIEZ PAS LE SEMICOLON à la fin de la ligne ALTER USER" ... Vous venez de terminer une épreuve de quatre heures !! Je me sens tellement stupide et reconnaissant en ce moment. :-D
freezjim
148

La réponse du personnel est correcte, mais si vous souhaitez automatiser davantage, vous pouvez:

$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"

Terminé! Vous avez enregistré User = postgres et password = postgres.

Si vous n'avez pas de mot de passe pour l'utilisateur postgres ubuntu, faites:

$ sudo passwd postgres

Diego
la source
Attention si votre mot de passe contient des caractères intéressants comme '!'
Brian Peterson
45

C'était frustrant, la plupart des réponses ci-dessus sont correctes mais elles ne mentionnent pas que vous devez redémarrer le service de base de données avant que les modifications du fichier pg_hba.conf ne prennent effet.

donc si vous apportez les modifications comme mentionné ci-dessus:

local all postgres ident

puis redémarrez en tant que root (sur centos, c'est quelque chose comme le service service redémarrage postgresql-9.2) maintenant vous devriez être en mesure d'accéder à la base de données en tant qu'utilisateur postgres

$psql
psql (9.2.4)
Type "help" for help.

postgres=# 

J'espère que cela ajoute des informations aux nouveaux utilisateurs de PostgreSQL

Miguel Pereira
la source
26
Sur type ubuntu: sudo service postgresql restart
Ann Kilzer
4
pour RHEL7sudo systemctl restart postgresql.service
Spechal
1
Et sur Mac?
AustinT
1
Pour mac, consultez cette question sur SO stackoverflow.com/questions/7975556/…
Rohith Nandakumar
Merci Miguel. J'ai confirmé le mot de passe manuellement et mon pgAdmin ne s'est pas connecté au databese jusqu'à ce que je redémarre le serveur postgres.
Ustin
20

Editez le fichier pg_hba.conf, par exemple avec sudo emacs /etc/postgresql/9.3/main/pg_hba.conf

Remplacez toutes les méthodes d'authentification par trust. Changer le mot de passe Unix pour l'utilisateur "postgres". Redémarrez le serveur. Connectez-vous avec psql -h localhost -U postgreset utilisez le mot de passe Unix juste défini. Si cela fonctionne, vous pouvez réinitialiser le fichier pg_hba.conf aux valeurs par défaut.

stevek
la source
1
Si vous êtes complètement coincé, c'est la seule méthode garantie. Changez toutes les méthodes pour faire confiance, redémarrez db, puis en tant que root:, sudo su - postgresprochain mot de passe set / fix / unset pour postgres db (et dans le shell, si nécessaire), puis restaurez dans secure md5ou identméthodes et redémarrez à nouveau pour que les valeurs restent. Soit dit en passant, sur Cent / RedHat 9.4, le fichier se trouve à:/var/lib/pgsql/9.4/data/pg_hba.conf
PapaK
17

Pour ceux qui l'utilisent pour la première fois et n'ont aucune information sur le mot de passe, ils peuvent suivre les étapes ci-dessous (en supposant que vous êtes sur ubuntu):

  1. Ouvrez le fichier pg_hba.conf dans/etc/postgresql/9.x/main

     sudo vi pg_hba.conf 

    2. modifiez la ligne ci-dessous

     local   all             postgres                                peer

    à

     local   all             postgres                                trust
  2. Redémarrez le serveur

      sudo service postgresql restart
  3. Enfin, vous pouvez vous connecter sans mot de passe comme indiqué sur la figureEnfin, vous pouvez vous connecter sans mot de passe comme indiqué sur la figure

Ref ici pour plus d'informations

Jose Kj
la source
12

Si vous essayez de vous connecter au shell postgres en tant qu'utilisateur postgres, vous pouvez utiliser les commandes suivantes.

passer à l'utilisateur postgres

# su - postgres

connectez-vous à psql

# psql

J'espère que cela pourra aider

geekgugi
la source
3
su - postgresdemande un mot de passe sur posgresql 9.5 sur Ubuntu 16.04
Prashanth Chandra
3
su - postgresest la commande suggérée par la documentation officielle de fedora , mais je reçois moi aussi un mot de passe. Pour contourner que je suivais ce forum postgres email qui utilise la même commande que la réponse acceptée ici: sudo -u postgres psql. N'oubliez pas d'initialiser et de démarrer le serveur de base de données.
icc97
11

Essayez de ne pas utiliser le paramètre -W et laissez le mot de passe en blanc. Parfois, l'utilisateur est créé sans mot de passe.

Si cela ne fonctionne pas, réinitialisez le mot de passe. Il existe plusieurs façons de le faire, mais cela fonctionne sur de nombreux systèmes:

$ su root
$ su postgres
$ psql -h localhost
> ALTER USER postgres with password 'YourNewPassword';
Francisco Puga
la source
7

En règle générale: VOUS NE DEVEZ JAMAIS DÉFINIR UN MOT DE PASSE POUR L'UTILISATEUR DE POSTGRES .

Si vous avez besoin d'un accès superutilisateur à partir de pgAdmin, créez un autre superutilisateur. De cette façon, si les informations d'identification de ce superutilisateur sont compromises, vous pouvez toujours ssh dans l'hôte de base de données réel et supprimer manuellement le superutilisateur à l'aide

sudo -u postgres -c "DROP ROLE superuser;"
ardilgulez
la source
1
Quelle est la raison de cette règle d'or?
Gershom
2
Pour que tous vos super-utilisateurs ne soient jamais compromis.
ardilgulez
1
Comment la définition d'un mot de passe pour postgres peut-elle compromettre tous les super-utilisateurs?
Gershom
4
la définition du mot de passe n'entraîne pas la compromission de tous les super-utilisateurs, mais la non-définition du mot de passe garantira que tous les super-utilisateurs ne seront jamais compromis. la raison en est: lorsque vous ne définissez pas le mot de passe, toute tentative de connexion par mot de passe à l'utilisateur postgres sera refusée alors que vous pouvez toujours l'utiliser vous-même par confiance.
ardilgulez
7

Une fois que vous êtes dans votre shell postgres, entrez cette commande

postgres=# \password postgres

Après avoir entré cette commande, vous serez invité à définir votre mot de passe, définissez-le simplement, puis essayez.

user12023415
la source
3

Lorsque vous installez postgresql, aucun mot de passe n'est défini pour l'utilisateur postgres, vous devez le définir explicitement sur Unix à l'aide de la commande:

sudo passwd postgres

Il vous demandera votre mot de passe sudo et vous demandera ensuite un nouveau mot de passe utilisateur postgres. La source

Loaderon
la source
0

Je voulais juste ajouter que vous devriez également vérifier si votre mot de passe a expiré.

Voir Échec de l'authentification par mot de passe Postgres pour plus de détails.

Jörg
la source
1
Veuillez ajouter quelques détails et un résumé de ce que ce lien fournit au cas où à l'avenir le lien n'existerait plus. Sinon, cela risque d'être signalé comme une réponse de faible qualité / lien uniquement.
Tanner le
J'aurais une lecture de ceci: meta.stackexchange.com/questions/8231/…
Tanner
0

Voici quelques combinaisons auxquelles j'ai essayé de me connecter:

# login via user foo
psql -Ufoo -h localhost

sudo -u postgres psql postgres

# user foo login to postgres db
psql -Ufoo -h localhost -d postgres
tokhi
la source
0

J'avais un problème similaire. Ubuntu m'a laissé me connecter à la console avec un mot de passe pour le superutilisateur. Sauf lorsque je me suis connecté avec -h localhost dans la commande de ligne psql.

J'ai également observé que "localhost: 8080 / MyJSPSiteLogIn" - montrait: Fatal: erreur d'authentification avec l'utilisateur "user".

pg_hba.conf était ok.

J'ai noté que deux versions de postgres fonctionnaient dans le même service.

Résolu - désinstallation de la version inutil.

David Uvm
la source
0

J'avais rencontré un problème similaire. Lors de l'accès à une base de données, je recevais une invite ci-dessous après la mise à jour du mot de passe "Échec de l'authentification par mot de passe pour l'utilisateur" postgres "" dans PGAdmin


Solution:

  1. Arrêter le serveur postgres
  2. Relancez pgadmin
  3. pgadmin vous demandera un mot de passe.
  4. Veuillez saisir le mot de passe actuel de l'utilisateur mentionné

J'espère que cela résoudra votre problème

entrez la description de l'image ici

amoljdv06
la source
-1

J'espère que cela vous aidera peu de temps. Vous pouvez changer le mot de passe de postgres sql en utilisant la commande ci-dessous.

Commander

sudo -u postgres psql

Et ensuite, vous pouvez mettre à jour le mot de passe

Commander

Modifier le mot de passe utilisateur postgres 'YOUR_NEW_PASSWORD';

Sonu patel
la source
1
Votre réponse ne contient que des informations, qui ont déjà été ajoutées: stackoverflow.com/a/7696398/8283469
L. Guthardt