From: | Alain Benard <alain(dot)benard(at)inrae(dot)fr> |
---|---|
To: | "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | question GRANT et option ADMIN |
Date: | 2025-06-13 14:15:50 |
Message-ID: | 6346f236bf594efc84f69f2b38307394@inrae.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Je rencontre un souci en voulant utiliser un script sql issue de pg_dumpall version Postgres 15 sur un serveur Postgres 17. Ce script contient d'abord les instructions de création des rôles utilisateurs puis toutes les instructions GRANT qui permettent d'inscrire les utilisateurs dans des groupes voire d'imbriquer des groupes. Nous avons mis en place une délégation de gestion des groupes en utilisant un groupe admin qui est mmebre du groupe à administrer avec l'option ADMIN.
Concrètement nous pouvons avoir Jean qui est membre du groupe compta_admin qui lui-même est membre du groupe compta_ecriture avec l'option admin. Avec l'héritage Jean peux ainsi ajouter ou supprimer des membres du groupe compta_ecriture.
Je peux donc me retrouver avec mon dump issu de pg_dump_all qui contient une ligne comme :
GRANT compta_ecriture TO stagiaire GRANTED BY jean;
Si j'exécute ce script avec l'utilisateur postgres je rencontre l'erreur suivante :
ERREUR: permission denied to grant privileges as role "jean"
DÉTAIL : The grantor must have the ADMIN option on role " compta_ecriture".
Il se trouve vrai que Jean n'est pas membre de compta_ecriture avec option ADMIN directement mais que son appartenance à compta_admin lui a permis de placer stagiaire dans ce groupe. Il aurait été plus judicieux que la base enregistre que c'est au final compta_admin qui a donné le privilège (GRANT compta_ecriture TO stagiaire GRANTED BY compta_admin) mais ce n'est pas le cas.
La documentation de GRANT ne m'a pas vraiment aidé. A partir de la version 16 on trouve « Quand un droit est enregistré comme ayant un donneur autre que le superutilisateur original, il dépend du donneur qui doit posséder ADMIN OPTION sur le rôle ; donc, si ADMIN OPTION est supprimé, les droits dépendants doivent être supprimés en même temps. »
Ca ne précise pas si ADMIN OPTION doit être positionné directement sur le rôle ou peut être hérité (ce qui est le cas chez nous)
La phrase 'si ADMIN OPTION est supprimé, les droits dépendants doivent être supprimés en même temps' ne précise pas si c'est fait automatiquement ou bien à la charge des DBA ou applicatifs ??
Bref c'est un peu le far ouest et je pense que potentiellement quelques-uns risquent aussi d'être ennuyés même sans parler de migration. Je me suis mis sur une 17 et j'ai utilisé mon principe de délégation pour mettre un user dans un groupe. J'ai ensuite supprimé le délégataire du groupe qui lui donnait des droits. Désormais je n'arrive plus à sortir le user de son groupe même sous postgres le système indiquant « role "usertest" has not been granted membership in role "test_lecture" by role "postgres" » et le role reste membre du groupe.
Si quelqu'un a une source qui explique comment ça fonctionne aujourd'hui je suis preneur.
Merci par avance.
From | Date | Subject | |
---|---|---|---|
Next Message | Bernard Schoenacker | 2025-06-14 08:05:10 | Re : Re: Re : Traduction du manuel de la version 18 |
Previous Message | Daniel Verite | 2025-06-12 12:37:22 | Re: Migration PostgreSQL 11.x vers 15.x de Windows Server 2012 vers 2025 |