En bon administrateur PostgreSQL, vous ne laisser jamais trainer un mot de passe PostgreSQL dans un script. Cependant, vous avez de nombreux outils qui se connectent à PostgreSQL : QGIS, FME, DBeaver et j’en passe. Vous multipliez alors les emplacements de stockage de vos mots de passe augmentant alors les risques de fuite. Autre point, si certains paramètres de connexion à une ou plusieurs bases évoluent (hôte, port, identifiant ou mot de passe) vous devez alors redéfinir ces paramètres dans chacun de vos outils.
Alors pourquoi ne pas centraliser tout cela dans un seul et unique fichier ? C’est le rôle des fichiers pgpass et pg_service mais une petite nuance existe entre les deux, voici de quoi vous y retrouver.
Fonctionnement
Pour se connecter à PostgreSQL, de nombreux logiciels dont PSQL, QGIS ou encore pgAdmin reposent sur libpq, une bibliothèque en C permettant permettant aux programmes clients de communiquer avec un serveur PostgreSQL.
Cette bibliothèque autorise plusieurs mécanismes permettant de simplifier les connexions aux serveurs PostgreSQL. L’un d’eux est l’utilisation des fichiers pgpass et pg_service : la bibliothèque recherchera toujours si un de ces fichiers (ou les deux) existe sur la machine.
pgpass
Localisation
Le fichier pgpass est prévu pour être spécifique à chaque utilisateur, voici les localisations définies par défaut :
- Sur Windows :
C:\Users\<user>\AppData\Roaming\postgresql\pgpass.conf - Sur Linux :
/home/<user>/.pgpass
Il est possible de redéfinir l’emplacement recherché :
Contenu
Le contenu du fichier est simple :
- une ligne par connexion,
:pour séparer les attributs de connexion#pour les commentaires,\pour échapper le caractère:ou\*comme caractère joker
libpq utilise la première ligne qui correspond aux paramètres de connexion qui lui ont été fournis, l’ordre est donc important.
Voici un exemple :
# Ma connexion 1 127.0.0.1:5432:ma_bdd:postgres:mon_mdp # Ma connexion 2 127.0.0.1:5432:*:mon_user:mon_mdp_2 # Ma connexion 3 123.123.123.123:5433:*:mon_user:mon_autre_mdp
Dans l’exemple précédent, lors d’une connexion au serveur 127.0.0.1, le client utilisera la ligne 1 ou 2 selon la base de données spécifiée dans les paramètres de connexion. Si la base est ma_bdd : la ligne 1 est utilisée, dans tous les autres cas (*), la ligne 2 sera utilisée.
Si libpq ne reçoit que l’adresse ip 127.0.0.1 par exemple, il utilisera alors la première ligne car il s’agit de la première qui correspond et la connexion se fera pour la base ma_bdd.
Notez que les paramètres indiqués au client prévalent sur ceux présents dans le fichier pgpass ce qui permet de surcharger le mot de passe si besoin (ou tout autre paramètre non spécifié).
pg_service
Localisation
Le fichier pg_service est prévu pour être spécifique à chaque utilisateur, voici les localisations définies par défaut :
- Sur Windows :
C:\Users\<user>\AppData\Roaming\postgresql\pg_service.conf - Sur Linux :
/home/<user>/.pg_service.conf
Il est possible de redéfinir l’emplacement recherché :
- Grâce à la variable d’environnement
PGSERVICEFILE
Contenu
Le contenu du fichier utilise le format des fichiers « INI » :
#pour les commentaires,[mon_service]nom du serviceparametre=valeurdéfinition des paramètres
libpq utilise la ligne dont le nom de service correspond au paramètre de connexion service qui lui a été fourni.
Voici un exemple :
[ma_connexion_1] host=127.0.0.1 port=5432 dbname=ma_bdd user=postgres password=mon_mdp [ma_connexion_2] host=127.0.0.1 port=5432 user=mon_user password=mon_mdp_2
Lequel utiliser ?
C’est là qu’est toute la question… Il n’y a pas de recommandations à ce sujet, le fichier pgpass est largement utilisé, le fichier pg_service est plus confidentiel. Cependant, le dernier à l’avantage d’être plus facile à utiliser.
Il est possible d’utiliser les deux en parallèle.
Voici quelques exemples pour pgAdmin, psql et QGIS.



Cet article vous a plu ?
N'hésitez pas à le partager, il interessera surement certains de vos contacts.
Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :
BDDPostgreSQL connexionlibpq