Modifier les privilèges
UPDATE z_asgard.gestion_schema_usr SET lecteur = '%nouveau_lecteur' WHERE nom_schema = '%nom_schema' ;
UPDATE z_asgard.gestion_schema_usr SET editeur = '%nouvel_editeur' WHERE nom_schema = '%nom_schema' ;
Remarque :
Seuls les membres de g_admin
et du rôle producteur[3] du schéma sont habilités à réaliser ces opérations.
Des droits supplémentaires peuvent être nécessaires si les nouveaux rôles désignés n'existent pas encore.
Indépendamment d’ASGARD, lorsque le propriétaire d’un objet change, PostgreSQL attribue au nouveau propriétaire très exactement les mêmes privilèges sur cet objet que ceux qu’avait l’ancien, et retire à ce dernier tous ses privilèges. Ainsi, le nouveau propriétaire n’a pas nécessairement tous les droits sur les objets qu’il possède si certains avaient été retirés au propriétaire précédent. En tant que propriétaire, il est évidemment habilité à rétablir ses privilèges manquants s’il le souhaite, de la même façon qu’il peut en allouer ou en retirer aux autres rôles.
ASGARD s’inspire de ce comportement pour les changements de lecteur[2] et d’éditeur[1]. Sous réserve que l’opération n’ait pas pour objet de supprimer l’éditeur/lecteur ou d’en déclarer un alors qu’il n’y en avait pas précédemment, les privilèges attribués au nouveau rôle sont très exactement ceux qu’avait l’ancien, y compris s’ils diffèrent[4] (en plus ou en moins) des privilèges standards pour la fonction.
Réglementaire : Principe⚓
Lorsqu’un nouvel éditeur ou lecteur est désigné, les mécanismes automatiques d’ASGARD lui transfèrent à l’identique les privilèges de l’ancien, et PostgreSQL fait de même pour les propriétaires/producteurs.
À noter que si l’ancien lecteur ou éditeur a reçu certains privilèges avec le droit de les transmettre à d’autres (WITH GRANT OPTION
), cette possibilité ne sera pas automatiquement transmise au nouveau lecteur ou éditeur, qui reçoit le privilège mais sans GRANT OPTION
. Cf. aussi Privilèges « WITH GRANT OPTION ». La question ne se pose pas pour le producteur, qui peut quoiqu’il arrive attribuer des permissions à d’autres sur les objets, puisqu’il en est propriétaire.
D’une manière générale, les mécanismes automatiques d’ASGARD respectent les modifications manuelles sur les privilèges et ils ne s’intéressent qu’aux droits des rôles producteurs, éditeurs et lecteurs.
Si l’utilisateur ne souhaite pas conserver certaines modifications manuelles, il lui est possible :
de les reprendre à la main, par des commandes
GRANT
/REVOKE
;d’utiliser la fonction
asgard_initialise_schema
pour rétablir les privilèges standards sur le schéma et tout son contenu ;d’utiliser la fonction
asgard_initialise_obj
pour rétablir les privilèges standards sur un objet donné.
Les lecteurs et éditeurs étant un ajout d'ASGARD aux fonctionnalités de PostgreSQL, ils ne peuvent être modifiés qu'en changeant les valeurs des champs lecteur
et editeur
de la vue utilisateur[5].
Exemple :
Désignation du pseudo-rôle public
comme lecteur du schéma w_snow
en remplacement de g_consult
:
UPDATE z_asgard.gestion_schema_usr
SET lecteur = 'public'
WHERE nom_schema = 'w_snow' ;
NOTICE: suppression et transfert vers le nouveau lecteur des privilèges de l'ancien lecteur du schéma w_snow :
NOTICE: > GRANT USAGE ON SCHEMA w_snow TO public
NOTICE: > REVOKE USAGE ON SCHEMA w_snow FROM g_consult
NOTICE: > GRANT SELECT ON TABLE w_snow.journal_du_mur TO public
NOTICE: > REVOKE SELECT ON TABLE w_snow.journal_du_mur FROM g_consult
NOTICE: > GRANT SELECT ON SEQUENCE w_snow.journal_du_mur_id_seq TO public
NOTICE: > REVOKE SELECT ON SEQUENCE w_snow.journal_du_mur_id_seq FROM g_consult
UPDATE 1