Modification des objets
ASGARD référence les schémas, mais pas les objets qu’ils contiennent, ce qui le rend relativement peu efficace quand il s’agit de suivre leurs changements d’état.
Il interagit uniquement avec les commandes ALTER [OBJET]
:
qui visent des objets rattachés à un schéma référencé dans la table de gestion[1] ;
à l’issue desquelles le propriétaire de l’objet n’est plus le rôle producteur[2] du schéma qui le contient.
Et sa seule action est d’attribuer ou réattribuer la propriété de l’objet en question au producteur du schéma.
Exemple :
Lorsque la table journal_du_mur
est déplacée de w_snow
(producteur g_snum
) à c_bibliotheque
(producteur g_admin
), g_admin
obtient la propriété de la table :
ALTER TABLE w_snow.journal_du_mur SET SCHEMA c_bibliotheque ;
NOTICE: attribution de la propriété de c_bibliotheque.journal_du_mur au rôle producteur du schéma :
NOTICE: > ALTER table c_bibliotheque.journal_du_mur OWNER TO g_admin
ALTER TABLE
Dans ces conditions, les commandes ALTER [OBJET] … OWNER
qui viseraient à définir un propriétaire différent du producteur du schéma sont inhibées : après exécution de la commande, ASGARD rend la propriété de l’objet au producteur.
Exemple :
Tentative pour attribuer à jon.snow
la propriété de la table journal_du_mur
:
ALTER TABLE w_snow.journal_du_mur OWNER TO "jon.snow" ;
NOTICE: attribution de la propriété de w_snow.journal_du_mur au rôle producteur du schéma :
NOTICE: > ALTER table w_snow.journal_du_mur OWNER TO g_snum
ALTER TABLE
ASGARD peut repérer qu’un objet n’a plus le bon propriétaire, mais il lui est impossible de distinguer spécifiquement les commandes ALTER [OBJET] … SET SCHEMA
parmi l’ensemble des commandes ALTER [OBJET]
. Dès lors, il n’est pas en mesure de transférer automatiquement les privilèges des éditeur[3] et lecteur[4] de l’ancien schéma à ceux du nouveau. Très concrètement, hormis pour l’ancien et le nouveau producteur (entre lesquels les privilèges sont transférés), les droits sur un objet restent inchangés lorsqu’il est déplacé par une commande ALTER
ou n'importe quelle méthode externe à ASGARD (fonctionnalité de pgAdmin, DBManager...).
Réglementaire : Principe⚓
Lorsqu’un objet change de schéma, les privilèges de l’éditeur et du lecteur ne sont pas modifiés en conséquence, sauf à déplacer l’objet avec la fonction asgard_deplace_obj.
Pour une gestion plus élaborée des droits lors d’un changement de schéma, il est recommandé de procéder au déplacement en utilisant la fonction asgard_deplace_obj.
Il est également possible de déplacer l’objet avec une commande SQL standard puis de recourir a posteriori à la fonction asgard_initialise_obj afin de nettoyer les droits sur l’objet déplacé et revenir aux privilèges standards. Si l’objet déplacé est une table avec un champ serial
, il faudra alors penser à appliquer également la fonction asgard_initialise_obj
sur la séquence associée – ou utiliser asgard_initialise_schema
pour réinitialiser les droits sur tous les objets du schéma.
On remarquera que la question ne se pose que pour les objets sur lesquels il est possible de conférer des privilèges. Pour les conversions, collationnements, opérateurs, dictionnaires et configuration de recherche plein texte, la question ne se pose pas, il convient et suffit d’utiliser une commande ALTER [OBJET] … SET SCHEMA
pour changer l’objet de schéma. ASGARD prendra soin d’attribuer la propriété de l’objet au producteur du schéma de destination et aucune autre action n'est nécessaire.
Complément : Et dans AsgardManager ?⚓
Le plugin QGIS AsgardManager mobilise asgard_deplace_obj
pour ses fonctionnalités de déplacement d'objets, aussi bien par glisser-déposer qu'avec les actions Déplacer/Couper
et Déplacer/Coller
. Plus précisément, il utilise la variante par défaut de la fonction (variante n°1), qui transfère à l'identique les privilèges des producteur, éditeur et lecteur de l'ancien schéma à ceux du nouveau schéma, en préservant les éventuels privilèges alloués à d'autres rôles.