acls :
connect :
type : datacl # ou nspacl, defacl, globaldefacl
inspect : SELECT …
grant : GRANT CONNECT ON … TO {role};
revoke : REVOKE CONNECT ON … FROM {role};
ro :
- connect
Pour que ldap2pg
puisse gérer une ACL, le DBA doit la décrire. C’est une partie très technique qui demande de bien connaître les entrailles de Postgres, parfois même le code C !
Comme dans Postgres, ldap2pg
distingue différents types d’ACL. On reprends la même nomenclature. Suivant le type d’ACL, ldap2pg
assiste la bouclage selon plusieurs axes : base de données, schémas, propriétaires ou une combinaison de tout ça. Ça peut devenir très gros.
Ensuite, ldap2pg
laisse le DBA faire ce qu’il préfère : écrire des requêtes SQL :-) Trois requêtes définissent une ACL : une pour inspecter les ACLs accordées en base. Cette requête est exécutée sur chaque base gérée. Ensuite les requêtes grant et revoke, évidemment. Si la requêtes d’inspection n’est pas définie, ldap2pg
ne saura pas révoquer, et réaccordera sans cesse l’ACL.
Un point important de l’introspection est la capacité de détecter si un GRANT ON ALL TABLES
est effectivement accordé à toute les tables/vues d’un schéma. ldap2pg
détecte qu’un GRANT ON ALL TABLES
est incomplet, et réexécute la requêt GRANT
.
Enfin, on peut grouper les ACL. Vu que l’introspection est complexe, c’est nécessaire de découper les ACL en ACL élémentaires. Petit défi : écrire le SELECT
qui retourne tout les rôles qui ont GRANT ALL PRIVILEGES ON ALL TABLES
;-)