
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.