Vous appréciez mon travail ?
Je serais ravi de prendre un café !

Vous prenez du plaisir à lire mes articles ? Vous apprenez de nouvelles choses ? Je serais ravis que vous supportiez mon travail avec une petite participation

1 café Merci, vous financez ma dose quotidienne de théïne (oui, en vrai je ne bois pas de café).
5 cafés Génial, ça couvre mes frais de serveur mensuels.
10 cafés Fantastique, avec ça je peux investir dans du matériel et approfondir mes connaissances.
BazinGa's - Tips & tuto IT

pgpass, pg_service ou les deux ?

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

  • Grâce à la variable d’environnement PGPASSFILE
  • Via le paramètre de connexion passfile

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 service
  • parametre=valeur dé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

50%