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

**URL:** <https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026>\
**Category:** Support Debian\
**Tags:** postgresql, sécurité\
**Created:** [Mai 28, 2024, 1:13 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026 "2024-05-28T13:13:27Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 28, 2024, 1:13 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/1 "2024-05-28T13:13:27Z")

</div>

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é ?

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Mai 28, 2024, 1:16 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/2 "2024-05-28T13:16:45Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 28, 2024, 1:23 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/3 "2024-05-28T13:23:04Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Mai 28, 2024, 1:32 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/4 "2024-05-28T13:32:19Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 28, 2024, 1:37 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/5 "2024-05-28T13:37:55Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Mai 28, 2024, 1:37 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/6 "2024-05-28T13:37:56Z")

</div>

> [@vbreton](#):
>
> sous l’utilisateur vagrant et sans demande de mot de passe:  
> `psql 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.

> [@vbreton](#):
>
> psql -h localhost -U vagrant work

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 ?

> **[20.1. The pg\_hba.conf File](https://www.postgresql.org/docs/current/auth-pg-hba-conf.html)**
>
> 20.1. The pg\_hba.conf File # Client authentication is controlled by a configuration file, which traditionally is named pg\_hba.conf and is stored …

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 28, 2024, 1:52 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/7 "2024-05-28T13:52:51Z")

</div>

Bonjour @clochette,

> [@Clochette](#):
>
> Tu as consulté le fichier pg\_hba.conf ?

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.

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Mai 28, 2024, 2:17 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/8 "2024-05-28T14:17:52Z")

</div>

> [@vbreton](#):
>
> 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.

---

<div class="post-metadata">

**Author:** ![vbreton](https://www.debian-fr.org/user_avatar/www.debian-fr.org/vbreton/32/11400_2.png) [@vbreton](https://www.debian-fr.org/u/vbreton)\
**Post date:** [Mai 28, 2024, 11:51 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/9 "2024-05-28T23:51:53Z")

</div>

Merci @clochette,

> [@Clochette](#):
>
> il faut être un user local enregistré déjà pour y accéder

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';`

---

<div class="post-metadata">

**Author:** ![yabb85](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/34f0e0/32.png) [@yabb85](https://www.debian-fr.org/u/yabb85)\
**Post date:** [Mai 31, 2024, 11:09 UTC](https://www.debian-fr.org/t/postgresql-mot-de-passe-demande-dans-un-cas-et-pas-dans-lautre/90026/10 "2024-05-31T23:09:19Z")

</div>

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.
