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.

ldap2pg

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 :


É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.


DALIBO

DALIBO est le spécialiste français de PostgreSQL®. Nous proposons du support, de la formation et du conseil depuis 2005.