Modifier les privilèges

Avec ASGARD, modifier les privilèges signifie changer l'éditeur[1] et/ou le lecteur[2] du schéma.

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.

À 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 :

1
2
UPDATE z_asgard.gestion_schema_usr
3
    SET lecteur = 'public'
4
    WHERE nom_schema = 'w_snow' ;
1
2
NOTICE:  suppression et transfert vers le nouveau lecteur des privilèges de l'ancien lecteur du schéma w_snow :
3
NOTICE:  > GRANT USAGE ON SCHEMA w_snow TO public
4
NOTICE:  > REVOKE USAGE ON SCHEMA w_snow FROM g_consult
5
NOTICE:  > GRANT SELECT ON TABLE w_snow.journal_du_mur TO public
6
NOTICE:  > REVOKE SELECT ON TABLE w_snow.journal_du_mur FROM g_consult
7
NOTICE:  > GRANT SELECT ON SEQUENCE w_snow.journal_du_mur_id_seq TO public
8
NOTICE:  > REVOKE SELECT ON SEQUENCE w_snow.journal_du_mur_id_seq FROM g_consult
9
UPDATE 1