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.