PostgreSQL: le changement de mot de passe pour un utilisateur ne fonctionne pas

9
  • J'ai installé PostgreSQLsur la EC2machine et maintenant je veux changer le mot de passe de l'utilisateurpostgres
  • je fais
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • Ensuite, je quitte le shell et essaie de me connecter avec un nouveau mot de passe
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

Ma PostgreSQLversion est

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

Qu'est-ce que je fais mal?

Je vous remercie

MISE À JOUR J'ai apporté des modifications pg_hba.confet voici à quoi cela ressemble maintenant

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Ensuite, j'ai redémarré le postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

J'ai essayé de me reconnecter, mais j'ai échoué

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"
rêveur
la source
L'ancien mot de passe est probablement encore stocké dans votre fichier ~ / .pgpass.
Non, il y a une invite de mot de passe là-bas. Je pense que le pg_hba.confest configuré de telle manière qu'il n'accepte pas l'authentification par mot de passe.
@willglynn, veuillez vérifier ma mise à jour, elle échoue à nouveau même après avoir apporté des modifications danspg_hba.conf
daydreamer

Réponses:

9

Comme l'a dit willglynn, c'est probablement votre fichier pg_hba.conf.

Si vous avez la ligne suivante:

local   all    all     peer

puis changez-le en:

local   all    all     md5

Cela devrait alors vous permettre de vous connecter avec votre nouveau mot de passe (en supposant que vous le fournissez correctement) :)

David S
la source
Salut @David, j'ai essayé comme vous l'avez mentionné, mais cela échoue toujours, veuillez vérifier ma mise à jour comme ce que j'ai fait, merci
daydreamer
Il existe toujours une peerligne qui s'applique aux connexions locales (sockets de domaine UNIX) de l' postgresutilisateur. Cela échouera à moins que l'extrémité distante ne s'exécute en tant postgresqu'utilisateur du système d' exploitation . Voir la documentation de pg_hba.conf pour une meilleure compréhension.
Bien que j'ai pu courir django manage.py syncdb, je continuerai à lire la pg_hba.confdocumentation que vous avez mentionnée, merci beaucoup pour votre aide
daydreamer
Je devais juste ajouter-h localhost
Mike
5

Je voulais juste ajouter cela en plus de changer le pg_hba.conffichier de

local   all    all     peer

à

local   all    all     md5

Selon la réponse acceptée, la seule façon de me connecter après avoir fait la même chose que l'OP était de passer le -hdrapeau lors de la tentative de connexion.

$ psql -U postgres -h localhost

J'espère que cela aidera quelqu'un à l'avenir. Ça me rendait fou!

JTG
la source
0

Tu as ceci...

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5

changer par ceci:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

et redémarrez le service postgresql en

sudo /etc/init.d/posgresql restart

ce travail pour moi

Israël L Rosas
la source
Lors du changement, pg_hba.confvous n'avez pas besoin de redémarrer Postgres. Recharger la configuration suffit. par exemple pg_ctl ... reloadouselect pg_reload_conf()
a_horse_with_no_name
Rechargez juste ... je ne savais pas ... merci
Israel L Rosas
-1

Pour les gens qui deviennent fous après avoir changé de mot de passe plusieurs fois et essayé tout ce qui est mentionné ici, n'oubliez pas de vérifier l'expiration de la validité de l'utilisateur. Vous pouvez le régler sur 'jamais expirer' comme ça dans psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';
kirpit
la source