[PostgreSQL] Mot de passe demandé dans un cas et pas dans l'autre

Tags: #<Tag:0x00007f9942be36f0> #<Tag:0x00007f9942be3600>

Bonjour,

Je suis sous la Debian 12.1 dans une VM virtualbox.
Sous PostgreSQL, j’ai un utilisateur vagrant auquel j’ai associé un mot de passe avec la séquence ALTER ROLE vagrant PASSWORD 'xxxxx'

Sous Bash et en m’étant préalablement identifié avec l’utilisateur vagrant, avec la ligne de commande suivante un mot de passe m’est demandé pour me connecter à la base de données work:
psql -h localhost -U vagrant work

Si je tape la commande suivante, j’arrive directement à me connecter à la base de données work sous l’utilisateur vagrant et sans demande de mot de passe:
psql work

Pourquoi dans le deuxième cas aucun mot de passe m’est demandé ?

Bonjour,

C’est parce que l’option -U implique de facto que ce n’est pas l’utilisateur courant, et donc demande le mot de passe (génération d’un nouveau jeton de session).

alors que la deuxième syntaxe sous-tend l’utilisation de l’utilisateur courant déjà authentifié.

1 J'aime

Merci @Zargos mais si je remplace psql -h localhost -U vagrant work par psql -h localhost, c’est à dire en supprimant l’option -U, le mot de passe de l’utilisateur vagrant m’est de mandé aussi.

oui parce que tu n’as pas précisé la BDD.
je sais c’est tordu, mais la structure de psql n’a pas vraiment changé depuis des lustres :slight_smile:

Oups, j’ai effectivement oublié de préciser le nom de la base de donnée dans mon précédent message. Même avec le nom de la BDD work le mot de passe m’est demandé:
psql -h localhost work

Tu te connectes avec l’utilisateur postgres de cette façon sur l’instance work, il autorise sans mots de passe la connexion sur Debian et Redhat de cette manière si tu ne modifie pas la configuration.

Tu te connectes sur l’instance work aussi mais en déclarant utiliser l’utilisateur vagrant cette fois, il demande donc le mot de passe.

Tu as consulté le fichier pg_hba.conf ?

Bonjour @clochette,

Merci beaucoup, je vais la consulter et l’étudier !

Par défaut, l’accès sans mot de passe par psql nom_de_la_bdd me semble dangereux mais il y a certainement quelque chose qui m’échappe car c’est trop gros.

C’est identique que pour Mariadb, il faut être un user local enregistré déjà pour y accéder.

1 J'aime

Merci @clochette,

Merci @Clochette et @zargos.

En supprimant le rôle vagrant dans PostgreSQL, la commande psql work sous l’utilisateur Linux vagrant ne me permet plus d’accéder à la BDD work. Ce qui s’explique par le fait que l’utilisateur Linux vagrant n’a pas d’utilisateur (rôle) PostgreSQL vagrant.

Avec un rôle vagrant (CREATE ROLE vagrant LOGIN), si je suis sous l’utilisateur Linux vagrant la commande psql work ne demande pas de mot de passe. En effet, sans autre précision PostgreSQL considère que je n’ai pas à en saisir un. Cela se comprend aisément par le fait qu’en étant déjà identifié sous Linux en tant qu’utilisateur vagrant, PostgreSQL n’a pas besoin de me le redemander.
Contrairement à ce que je supposais précédemment, la sécurité n’est donc pas mise en cause.

En ce qui concerne l’option -U de psql, elle sert à définir le nom d’utilisateur PostgreSQL lorsqu’il est différent de celui du nom d’utilisateur Linux actuel.

It could also be that you were assigned a PostgreSQL user name that is different from your operating system user name; in that case you need to use the -U switch or set the PGUSER environment variable to specify your PostgreSQL user name.

Enfin lorsque je saisis psql -h localhost work (utilisation de l’option -h pour désigner l’emplacement du serveur PostgreSQL), un mot de passe est demandé. C’est légitime dans le sens où poste client et poste serveur peuvent correspondre à deux machines différentes sur le réseau et que l’on ne peut ni garantir et ni souhaiter qu’elles disposent des mêmes mots de passe. Le mot de passe à saisir est dans ce cas celui définit au niveau de l’utilisateur PostgreSQL.

En prenant en considération l’ensemble des paragraphes précédents, la création du rôle vagrant approprié se résume à la ligne suivante:
CREATE ROLE vagrant LOGIN PASSWORD 'xxxxx';

1 J'aime

Quand tu met l’option -h tu passes par le réseau mais si tu ne la met pas tu passeras par un socket unix. Tu peux régler ces comportements dans postgres avec le fichier pg_hba.conf check les règles local et host.
Par défaut il me semble que local est en peer et host sur du md5 ou autre mot de passe.
Attention ident à un comportement différent en local et host.