Paris, le 3 juin 2024
Dalibo vous annonce la disponibilité de ldap2pg 6.1. Cette version supporte de PostgreSQL 16 et sa nouvelle administration non-privilégiée des rôles. De nombreuses améliorations de compatibilité et de configurabilité en font une version pratique et stable. Suivez la documentation pour installer cette nouvelle version.
Depuis 2017, ldap2pg propose la meilleure solution de synchronisation automatique de rôles et de privilèges pour PostgreSQL.
Configurez l’authentification LDAP dans le fichier pg_hba.conf
puis utilisez ldap2pg pour créer et configurer les rôles depuis votre annuaire d’entreprise.
Exécution non-privilégiée & PostgreSQL 16
PostgreSQL 16 apporte une rupture de compatibilité importante dans la délégation de l’administration des rôles
à un utilisateur non privilégié.
Ce changement part du constat que l’implémentation précédente
offre une illusion de sécurité
et n’est pas cohérente avec le standard SQL.
En effet, un utilisateur avec l’option CREATEROLE
peut de facto s’octroyer des droits qu’il n’a pas.
Aussi, ldap2pg 6.1 refuse de s’exécuter sans être super utilisateur sur PostgreSQL jusqu’à la version 15.
Pour mettant à jour depuis ldap2pg 6.0 avec l’option CREATEROLE
sur Postgres 15 et inférieur,
le plus simple est d’accorder les droits super-utilisateur à l’utilisateur.
ldap2pg 6.1 sait s’exécuter avec l’option CREATEROLE
sur PostgreSQL 16.
Depuis PostgreSQL 16, ldap2pg ne peut accorder que les droits qu’il possède lui-même.
Configurabilité
ldap2pg 6.1 apporte de nouvelles facilité de configuration.
Depuis la version 6.0, le fichier ldap2pg.yml
n’accepte plus de configuration des accès PostgreSQL et LDAP.
Le moyen privilégié est d’utiliser des variables d’environnement et les fichiers ldaprc
, .pgpass
, etc.
Pour passer les accès par fichier, vous pouvez désormais écrire les variables d’environnement dans un fichier .env
déposé à côté du fichier ldap2pg.yml
ou dans le dossier de travail de ldap2pg.
À la manière des commandes make
et git
,
ldap2pg accepte un paramètre -C
déterminant le dossier de travail de la commande.
Ce paramètre détermine la recherche des fichiers de configuration ldap2pg.yml
et ldaprc
.
Enfin, ldap2pg accepte désormais un argument en ligne de commande : la chaîne de connexion à l’instance PostgreSQL à synchroniser. Cette chaîne de connexion peut être au format URL ou au format clef=valeurs.
Compatibilité
ldap2pg n’exécute plus la commande LDAP whoami après la connexion à l’annuaire LDAP. Cette opération est une extension du protocole LDAP et n’est pas disponible partout. Le retrait pur et simple de cette commande enlève la dépendence à la disponibilité de cette extension.
Le paramètre LDAPURI
peut contenir plusieurs URI séparées par un espace.
En cas d’échec sur la première URI, le client LDAP doit tenter sur le second.
C’est une manière d’être résilient à la panne d’un annuaire.
ldap2pg 6.1 corrige une régression de la version 6.0 qui traitaient ce paramètre comme une seule URI.
Le protocole LDAP est un protocole insensible à la casse, uniquement pour les caractères ASCII. ldap2pg 6.1 est désormais insensible à la casse des DN et des noms d’attributs.
Crochets d’exécution
Une longue demande vient d’être implémentée dans ldap2pg :
la définition de commande SQL arbitraire à exécuter avant ou après la création d’un rôle.
Par exemple pour créer un schéma propre à un nouvel utilisateur.
La règle role accepte désormais les paramètres before_create
et after_create
.
Ces requêtes peuvent recevoir des valeurs dynamiques depuis la recherche LDAP.
Pour la sécurité et la simplicité,
ldap2pg accepte deux nouveaux modificateurs sur un attribut LDAP:
.identifier()
protège la valeur comme identifiant PostgreSQL
et .string()
protège la valeur comme chaîne littérale SQL.
Continuer en cas d’erreur
Certaines erreurs n’interdisent pas de continuer la synchronisation. Par exemple, si ldap2pg échoue à supprimer un rôle possédant des objets en base, rien n’interdit de créer le rôle suivant. ldap2pg 6.1 tolère jusqu’à 8 erreurs de synchronisation avant d’abandonner. Bien sûr, la synchronisation termine en échec pour la moindre erreur accumulée, même si ldap2pg continue jusqu’au bout. Avec ce comportement, un problème de synchronisation sur un utilisateur n’impacte pas la synchronisation des autres.
Autres changements
ldap2pg est disponible pour RHEL 9. Au démarrage, ldap2pg affiche son PID. En fin d’exécution, ldap2pg affiche une nouvelle métrique de performances : le temps passé à inspecter Postgres. Voir plus dans la documentation des changements.
Retrouvez la documentation en anglais, des procédures et le support communautaire à ces adresses :
- Documentation en ligne : http://ldap2pg.rtfd.io/en/latest/
- Le projet sur GitHub : https://github.com/dalibo/ldap2pg
Étienne BERSAC et Pierre-Louis GONON développent ldap2pg, un projet du Dalibo Labs. Pour toutes questions techniques, l’équipe recommande d’utiliser la page de ldap2pg sur GitHub.