supprimer l'exigence de mot de passe pour l'utilisateur postgres

47

Je comprends que lors de l’installation, PostgreSQL n’a pas de mot de passe pour son utilisateur racine (db root) (postgres):

postgres=# select usename, passwd is null from pg_shadow;
 usename  | ?column? 
----------+----------
 postgres | t
(1 row)

... et il est conseillé de le configurer avec:

alter role postgres password '<<very-secret>>';

(puis mettez à jour le pg_hba.conffichier en conséquence)

Ma question est la suivante: quel est le code SQL à utiliser pour revenir à la situation précédente dans laquelle aucun mot de passe n'était requis pour l'utilisateur postgres.

En général, comment puis-je supprimer l'exigence de mot de passe pour n'importe quel rôle? Je ne demande pas comment changer le mot de passe mais plutôt comment supprimer l'exigence de mot de passe ( passwdcolonne null dans la table pg_shadow).

Marcus Junius Brutus
la source

Réponses:

55

Si un mot de passe est requis ou non n'a rien à voir avec pg_shadowet si un mot de passe est réellement défini pour l'utilisateur. Oui, je sais, c'est bizarre.

pg_hba.confcontrôle la méthode d'authentification. Si vous souhaitez demander un mot de passe, utilisez l' md5authentification. Si vous souhaitez autoriser la connexion sans mot de passe à qui que ce soit, utilisez trust. Si vous souhaitez exiger le même nom d'utilisateur dans le système d'exploitation que dans PostgreSQL, utilisez peer(UNIX, uniquement pour les connexions locales) ou sspi(Windows).

Si un mot de passe est défini, mais pg_hba.confn'indique pas à PostgreSQL de le demander, le mot de passe est ignoré.

Si pg_hba.confordonne à PostgreSQL de demander un mot de passe, mais qu'aucun n'est défini, toutes les tentatives de connexion échoueront, quel que soit le mot de passe fourni.

Craig Ringer
la source
12

L'utilisateur postgres par défaut n'a pas de mot de passe. Pour supprimer un mot de passe utilisateur (dans ce cas pour l'utilisateur / le rôle postgres):

alter role postgres password null;

Nous avons également besoin d'authentification définie pour trusten pg_hba.conf- détails [ https://dba.stackexchange.com/a/19657/52550]

lalligood
la source
3
Maintenant, je ne peux pas accéder à psql
Roberth Solís
3
Ouais, maintenant on me demande un mot de passe et je ne peux pas me connecter ...
Amalgovinus
1
cette commande m'interdit de postgres - idem @ Amalgovinus.
Nam G VU
1
Si vous ne pouvez pas accéder à cause de l'erreur psql: fe_sendauth: no password supplied, puis modifiez votre C:\Program Files\PostgreSQL\10\data\pg_hba.confet remplacer md5par trustcôté 127.0.0.1/32sous IPv4 local connectionset à côté de ::1/128sousIPv6 local connections
Marco Lackovic
1

Cela a fonctionné pour moi:

alter role postgres password '';

Thouliha
la source
4
Lorsque je fais cela dans postgres 10, j'obtiens le message d'erreur "AVIS: une chaîne vide n'est pas un mot de passe valide, effacement du mot de passe". Mais cela change quand même mon mot de passe et je ne peux pas me connecter avec quoi que ce soit! WTF !!
Amalgovinus
@Amalgovinus voir mon commentaire à la réponse de lalligood
Marco Lackovic