J'ai oublié le mot de passe que j'ai entré lors de l'installation de postgres

205

J'ai oublié ou mal saisi (lors de l'installation) le mot de passe de l'utilisateur par défaut de Postgres. Je n'arrive pas à l'exécuter et j'obtiens l'erreur suivante:

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

Est-il possible de réinitialiser le mot de passe ou comment créer un nouvel utilisateur avec des privilèges de superutilisateur?

Je suis nouveau sur Postgres et je viens de l'installer pour la première fois. J'essaie de l'utiliser avec Rails et j'utilise Mac OS X Lion.

hilarl
la source
1
Je ne peux pas encore commenter les réponses, alors je dois le faire de cette façon. J'ai fait ce que SaiyanGirl a dit, mais je devais encore entrer un mot de passe, qui était `` postgres '' pour me connecter, puis je pouvais réinitialiser le mot de passe
Pascale

Réponses:

359
  1. trouver le fichier pg_hba.conf- il peut être localisé, par exemple dans /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  2. Sauvegardez

    cp pg_hba.conf pg_hba.conf-backup

  3. placez la ligne suivante (soit comme la première ligne sans commentaire, soit comme la seule):

Pour toute occurrence de ci-dessous (locale et hôte), section de réplication exepct si vous n'en avez pas, elle doit être modifiée comme suit, aucune authentification MD5 ou Peer ne devrait être présente.

local  all   all   trust
  1. redémarrez votre serveur PostgreSQL (par exemple, sous Linux :)

    sudo /etc/init.d/postgresql restart

    Si le service (démon) ne démarre pas la génération de rapports dans le fichier journal:

    les connexions locales ne sont pas prises en charge par cette version

    tu devrais changer

    local all all trust

    à

    host all all 127.0.0.1/32 trust

  2. vous pouvez maintenant vous connecter en tant que n'importe quel utilisateur. Connectez-vous en tant que superutilisateur postgres(notez que le nom du superutilisateur peut être différent dans votre installation. Dans certains systèmes, il est appelé pgsql, par exemple. )

    psql -U postgres

    ou

    psql -h 127.0.0.1 -U postgres

    (notez qu'avec la première commande vous ne serez pas toujours connecté avec l'hôte local)

  3. Réinitialiser le mot de passe ('remplacez my_user_name par postgres puisque vous réinitialisez l' utilisateur postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. Restaurez l'ancien pg_hba.confcar il est très dangereux de rester

    cp pg_hba.conf-backup pg_hba.conf

  5. redémarrez le serveur, afin de fonctionner avec le coffre-fort pg_hba.conf

    sudo /etc/init.d/postgresql restart

Pour en savoir plus sur ce fichier pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

Arsen7
la source
9
Et puis commencer psql? On me demande toujours un mot de passe, et je ne le sais pas
CodyBugstein
4
cette réponse n'a PAS fonctionné pour moi, après avoir fait l'étape 3, le service ne démarre pas, je ne sais pas, peut-être que c'est l'OS (W8), ça ne va pas.
Scaramouche
3
quelqu'un pour Windows?
Mahesha999
2
Gardez à l'esprit que l'ordre des entrées dans pg_hba.conf est important. Si vous ajoutez "local all all trust" à la fin du fichier, cela ne fonctionnera pas comme prévu, car les enregistrements précédents seront mis en correspondance en premier. Mettez donc cela en haut du fichier pour avoir ce que vous attendez.
Tagar
6
Si vous êtes sur Windows avec cette erreur, faites défiler jusqu'à la réponse de @SaiyanGirl. Modifiez simplement les colonnes METHOD des entrées existantes en 'trust', puis changez-les de nouveau lorsque vous avez terminé
sean.hudson
99

Lors de la connexion à postgres depuis la ligne de commande, n'oubliez pas d'ajouter -h localhost comme paramètre de ligne de commande. Sinon, postgres essaiera de se connecter en utilisant le mode d'authentification PEER.

Ce qui suit montre une réinitialisation du mot de passe, une connexion échouée avec l'authentification PEER et une connexion réussie à l'aide d'une connexion 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

Échouer:

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

Travailler avec -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
la source
7
Merci pour le conseil concernant l'option "-h", m'a aidé.
Bunkerbewohner
Inutile sur Windows cmd.exe
Fabien Haddadi
1
Meilleure réponse pour Mac
Muhammad Umar
72

Le fichier pg_hba.conf( C:\Program Files\PostgreSQL\9.3\data) a changé depuis que ces réponses ont été données. Ce qui a fonctionné pour moi, dans Windows, c'est d'ouvrir le fichier et de changer le METHODde md5en 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

Ensuite, en utilisant pgAdmin III, je me suis connecté sans mot de passe et j'ai changé le postgres'mot de passe utilisateur en allant surFile -> Change Password

SaiyanGirl
la source
Cela ne fonctionne pas parce que PgAdmin demande toujours le mot de passe actuel ... Je réinitialise sur 'trust' et redémarre PgAdmin. Ne peut toujours pas se réinitialiser sans taper le mot de passe ACTUEL ...
gène b.
1
Une fois que vous avez changé la méthode, trustvous pouvez suivre cela et modifier le mot de passe dans cmd
Gilad Green
12

Juste une note, sous Linux Vous pouvez simplement exécuter sudo su - postgrespour devenir l'utilisateur postgres et à partir de là changer ce qui est requis en utilisant psql.

Daniel
la source
3
vous avez toujours besoin du mot de passe après avoir exécuté psql
Snow
8
  1. Modifiez le fichier /etc/postgresql/<version>/main/pg_hba.confet recherchez la ligne suivante:

    local   all             postgres                                md5
  2. Modifiez la ligne et changez md5à la fin pour trustenregistrer le fichier

  3. Recharger le service postgresql

    $ sudo service postgresql reload
  4. Cela chargera les fichiers de configuration. Vous pouvez maintenant modifier l' postgresutilisateur en vous connectant au psqlshell

    $ psql -U postgres
  5. Mettre à jour le postgresmot de passe de l'utilisateur

    alter user postgres with password 'secure-passwd-here';
  6. Modifiez le fichier /etc/postgresql/<version>/main/pg_hba.conf, trustrevenez au md5fichier et enregistrez-le

  7. Recharger le service postgresql

    $ sudo service postgresql reload
  8. Vérifiez que le changement de mot de passe fonctionne

    $ psql -U postgres -W
Ray Hunter
la source
Est-il si difficile de proposer une solution Windows? Tout le monde n'utilise pas Linux avec sudo. Comment pourrais-je le faire sous Windows ??
gène b.
7

J'avais juste ce problème sur Windows 10 et le problème dans mon cas était que je courais psql et qu'il essayait par défaut de se connecter avec mon nom d'utilisateur Windows ("Nathan"), mais il n'y avait aucun utilisateur PostgreSQL avec ce nom, et ça ne me disait pas ça.

La solution a donc été d'exécuter psql -U postgresplutôt que simplement psql, puis le mot de passe que j'ai entré lors de l'installation a fonctionné.

Nathan Wailes
la source
5

Ajout de la réponse pour l'utilisateur Windows pour la dernière version postgres (> 10),

Accédez à votre emplacement d'installation postgres et recherchez pg_hba.conf , vous le trouverez dans..\postgres\data\pg_hba.conf

Ouvrez ce fichier avec le bloc-notes, trouvez cette ligne,

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

Changez la méthode de md5 en confiance,

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

Maintenant, allez dans votre SQL Shell (PSQL) et laissez tout vide,

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

Il ne demandera pas de mot de passe cette fois, et vous serez connecté,

Maintenant, lancez cette ligne, ALTER USER yourusername WITH SUPERUSER

Vous pouvez maintenant laisser le shell avec \ q

Allez à nouveau dans le fichier pg_hba.conf et changez à nouveau la MÉTHODE de confiance en md5 et enregistrez-le.

Connectez-vous maintenant avec votre nouvel utilisateur et votre nouveau mot de passe et vous pouvez vérifier \ du pour ses attributs.

Bidhan Majhi
la source
1

Pour l'installation de Windows, un utilisateur Windows est créé. Et "psql" utilise cet utilisateur pour la connexion au port. Si vous changez le mot de passe de l'utilisateur PostgreSQL, cela ne changera pas celui de Windows. La ligne de commande juste en dessous ne fonctionne que si vous avez accès à la ligne de commande.

Au lieu de cela, vous pouvez utiliser l'application Windows GUI "c: \ Windows \ system32 \ lusrmgr.exe". Cette application gère les utilisateurs créés par Windows. Vous pouvez donc maintenant modifier le mot de passe.

cpunky
la source
1

Ce que j'ai fait pour résoudre le même problème était:

Ouvrez le fichier pg_hba.conf avec l'éditeur gedit depuis le terminal:

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

Il vous demandera un mot de passe. Saisissez votre mot de passe de connexion administrateur. Cela ouvrira gedit avec le fichier. Collez la ligne suivante:

host  all   all  127.0.0.1/32  trust

juste en dessous -

# Database administrative login by Unix domain socket

Enregistrez-le et fermez-le. Fermez le terminal, ouvrez-le à nouveau et exécutez cette commande:

psql -U postgres

Vous allez maintenant entrer dans la console psql. Maintenant, changez le mot de passe en entrant ceci:

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

S'il indique que l'utilisateur n'existe pas, alors au lieu de l' ALTERutiliser CREATE.

Enfin, supprimez cette certaine ligne que vous avez collée dans pg_hba et enregistrez-la.

Inconnu
la source
0

Si vous êtes dans Windows, vous pouvez simplement exécuter

net user postgres postgres

et connectez-vous dans postgres avec postgres / postgres en tant qu'utilisateur / mot de passe

ivofernandes
la source
0

Le fichier .pgpass dans le répertoire personnel d'un utilisateur ou le fichier référencé par PGPASSFILE peut contenir des mots de passe à utiliser si la connexion nécessite un mot de passe (et aucun mot de passe n'a été spécifié autrement). Sous Microsoft Windows, le fichier est nommé% APPDATA% \ postgresql \ pgpass.conf (où% APPDATA% fait référence au sous-répertoire Application Data du profil de l'utilisateur).

Ce fichier doit contenir des lignes du format suivant:

nom d'hôte: port: base de données: nom d'utilisateur: mot de passe

(Vous pouvez ajouter un commentaire de rappel au fichier en copiant la ligne ci-dessus et en la précédant de #.) Chacun des quatre premiers champs peut être une valeur littérale, ou *, qui correspond à n'importe quoi. Le champ de mot de passe de la première ligne qui correspond aux paramètres de connexion actuels sera utilisé. (Par conséquent, mettez d'abord des entrées plus spécifiques lorsque vous utilisez des caractères génériques.) Si une entrée doit contenir: ou \, échappez ce caractère avec. Un nom d'hôte de localhost correspond aux connexions TCP (nom d'hôte localhost) et socket de domaine Unix (pghost vide ou répertoire de socket par défaut) provenant de la machine locale. Dans un serveur de secours, un nom de base de données de réplication correspond aux connexions de réplication en streaming établies vers le serveur maître. Le champ de base de données est d'une utilité limitée car les utilisateurs ont le même mot de passe pour toutes les bases de données du même cluster.

Sur les systèmes Unix, les autorisations sur .pgpass doivent interdire tout accès au monde ou au groupe; réalisez ceci par la commande chmod 0600 ~ / .pgpass. Si les autorisations sont moins strictes que cela, le fichier sera ignoré. Sous Microsoft Windows, il est supposé que le fichier est stocké dans un répertoire sécurisé, donc aucune vérification des autorisations spéciales n'est effectuée.

rahulnikhare
la source
Cela a fonctionné pour moi, où le chemin s'est étendu à C: \ Users \ <user> \ AppData \ Roaming \ postgresql \ pgpass.conf. Éteindre et rallumer le serveur PostgreSQL semblait également aider.
géodonnées
0

Si vous exécutez postgresql sur mac os, essayez- les :

  1. Modifiez le fichier pg_hba.conf

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

  3. Changez la méthode "md5" pour tous les utilisateurs en "confiance" vers le bas du fichier

  4. Trouver le nom du service

  5. ls / Library / LaunchDaemons

  6. Recherchez postgresql

  7. Arrêtez le service postgresql

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

  9. Démarrer le service postgresql

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

  11. Démarrer la session psql en tant que postgres

  12. psql -U postgres

  13. (ne devrait pas demander de mot de passe en raison du paramètre de «confiance»)

  14. Réinitialiser le mot de passe dans la session psql en tapant

  15. ALTER USER postgres avec mot de passe 'secure-new-password';

  16. \ q
  17. entrer

  18. Modifiez le fichier pg_hba.conf

  19. Revenez à «md5»

  20. Redémarrez à nouveau les services

David
la source
-1

C'est ce qui a fonctionné pour moi sur Windows:

Modifiez le fichier pg_hba.conf situé dans C: \ Program Files \ PostgreSQL \ 9.3 \ data.

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

Modifiez la méthode d'approbation en md5 et redémarrez le service postgres sous Windows.

Après cela, vous pouvez vous connecter en utilisant l'utilisateur postgres sans mot de passe en utilisant pgadmin. Vous pouvez changer le mot de passe en utilisant Fichier-> Changer le mot de passe.

Si l'utilisateur postgres ne dispose pas de privilèges de superutilisateur, vous ne pouvez pas modifier le mot de passe. Dans ce cas, connectez-vous avec un autre utilisateur (pgsql) avec un accès superutilisateur et accordez des privilèges aux autres utilisateurs en cliquant avec le bouton droit sur les utilisateurs et en sélectionnant propriétés-> Privilèges de rôle.

Chétan
la source