LOXODATA

Connexion à une instance PostgreSQL avec mappage d'utilisateur

2025-08-05   500 mots, 3 minutes de lecture

Fichier de mappage

En complément des articles déjà publiés sur les connexions (premier article et deuxième article), nous vous proposons aujourd’hui d’utiliser le fichier de mappage pg_ident.conf.

Son utilisation n’est pas très fréquente, mais il peut être utile de savoir l’utiliser.

Authentification peer

PostgreSQL dispose d’un système qui facilite la connexion à l’instance de base de données pour les administrateurs. C’est aussi souvent le seul moyen de se connecter à une instance fraîchement installée.

Cette méthode s’appelle peer et consiste à autoriser la connexion locale (par la socket Unix) à la condition que l’utilisateur de l’instance porte exactement le même nom que l’utilisateur système.

loxodata@debian:~$ psql -U postgres
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"

loxodata@debian:~$ sudo -iu postgres
postgres@debian:~$ psql
psql (17.5 (Debian 17.5-1.pgdg120+1))
Type "help" for help.

postgres=#

Mais comment utiliser cette authentification peer lorsque le compte de base de données ne porte par le même nom que le compte système ?

Le fichier pg_ident.conf

Le fichier pg_ident.conf est là pour nous aider à permettre la connexion dans le cas où le compte système et le compte de base de données ne portent pas le même nom.

Dans ce cas, il suffit d’ajouter un mappage des utilisateurs concernés dans ce fichier.

postgres@debian:~$ vi /etc/postgresql/17/main/pg_ident.conf

À la fin du fichier, le dernier commentaire nous indique la syntaxe à utiliser. Dans notre cas, c’est l’utilisateur système loxodata qui sera mappé sur le seul utilisateur de l’instance : postgres.

Attention, d’un point de vue sécurité, c’est une mauvaise pratique de mapper le compte postgres, il s’agit ici seulement d’un exemple simple pour la compréhension.

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
loxomap         loxodata                postgres

Cela n’est pas suffisant pour faire fonctionner le tout, le fichier pg_hba.conf doit aussi être configuré pour prendre en compte ce mappage.

postgres@debian:~$ vi /etc/postgresql/17/main/pg_hba.conf

Pour notre exemple sous Debian, modifions la première ligne non commentée de notre fichier.

local   all          postgres             peer          map=loxomap

En ajoutant l’option map=loxomap, chaque connexion locale sur le compte postgres qui est traitée par cette ligne du fichier utilisera le mappage déclaré.

Il ne reste plus qu’à recharger la configuration.

postgres@debian:~$ pg_ctlcluster 17 main reload

Lancement de la connexion

Tentons une connexion depuis le compte postgres.

postgres@debian:~$ psql
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"

Le fonctionnement a changé ! On ne peut plus se connecter au compte postgres comme avant, sauf à ajouter le compte système postgres dans le mappage loxomap.

Mais depuis le compte loxodata, la connexion fonctionne désormais comme attendu.

loxodata@debian:~$ psql -U postgres
psql (17.5 (Debian 17.5-1.pgdg120+1))
Type "help" for help.

postgres=#

Conclusion

Avec cette méthode, il est simple pour un administrateur de gérer le mappage d’un utilisateur système vers un rôle de l’instance PostgreSQL.

Il convient cependant d’être vigilant sur la sécurité. L’ouverture d’une connexion depuis des comptes systèmes vers un compte de base de données peut avoir des impacts sur l’exposition des données, voire pire dans le cas de comptes privilégiés.