Version mineure 1.3.2

La version 1.3.2 est la première version d'ASGARD officiellement compatible avec la version 14 de PostgreSQL (sans qu'aucune adaptation n'ait été nécessaire). Il s'agit d'une version mineure qui n'apporte aucune évolution fonctionnelle, hormis pour les objets de type « procédure », pour lesquels elle s'assure qu'ASGARD ait le comportement attendu.

Prise en charge effective des procédures

Apparues avec la version 11 de PostgreSQL, les procédures sont des objets apparentés aux fonctions (cf. documentation de PostgreSQL pour plus de détails), qui peuvent être gérés par des commandes spécifiques - CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, GRANT ... ON PROCEDURE, etc. - ou par des commandes communes aux fonctions et procédures (désignées collectivement par le terme « routines ») - ALTER ROUTINE, DROP ROUTINE, GRANT ... ON ROUTINE, etc.

Avec les versions antérieures d'ASGARD, les commandes utilisant les mots-clés PROCEDURE et ROUTINE n'activaient pas les déclencheurs sur événements de l'extension. Il n'y avait donc pas de mise en cohérence automatique des propriétaires des procédures avec le producteur du schéma, ni d'ailleurs des fonctions modifiées par des commandes ALTER ROUTINE. Si les anomalies sur les procédures étaient bien détectées par la fonction de diagnostic (bien qu'elle les appelle « fonctions »), les procédures n'étaient par contre pas prises en charge par les fonctions de réinitialisation des droits et de déplacement d'objets. De plus, dans l'hypothèse où des privilèges personnalisés[1] auraient été définis sur des procédures, leur transfert en cas de changement de producteur[2], lecteur[3] ou d'éditeur[4] aurait échoué, car les commandes GRANT/REVOKE ... ON FUNCTION utilisées par les anciennes versions d'ASGARD ne sont pas acceptées pour des procédures.

La version 1.3.2 corrige ces travers, pour une prise en charge complète des procédures. En particulier :

  • La fonction de déplacement d'objet et la fonction de réinitialisation des droits sur un objet acceptent désormais les valeurs « routine » et « procedure » pour leur paramètre obj_typ. Concrètement, pour les versions de PostgreSQL antérieures à la version 11, les types « routine », « procedure », « function » et « aggregate » sont tous assimilés à des fonctions. ASGARD produit alors des commandes ALTER FUNCTION, GRANT ... ON FUNCTION, etc., étant entendu que les procédures n'existent pas en tant que telles. Sous PostgreSQL 11 ou supérieur, ils sont assimilés à des routines. ASGARD génère des commandes ALTER ROUTINE, GRANT ... ON ROUTINE, etc., qui sont acceptées à la fois pour les procédures et tous les types de fonctions.

  • Lorsque ASGARD est installé sous PostgreSQL 11 ou supérieur, ses déclencheurs sur événements sont activés comme il se doit par les commandes relatives aux routines et procédures.

  • La fonction de diagnostic désigne désormais comme « routines » les fonctions et procédures sur lesquelles elle détecte des anomalies.

  • La fonction de réinitialisation des droits sur un schéma traite les procédures au même titre que tous les objets sur lesquels des droits peuvent être conférés.

  • Les privilèges personnalisés sur les procédures sont correctement transférés en cas de changement de lecteur, éditeur ou producteur du schéma.

In fine, le comportement d'ASGARD avec les procédures est dorénavant exactement le même que pour les fonctions.

Correction d'une anomalie

Avec les versions antérieures d'Asgard, lorsque la suppression d'une extension emportait celle d'un ou plusieurs schémas liés à l'extension, le déclencheur sur événement asgard_on_drop_schema ne s'activait pas et, s'il avait été référencé[5], le schéma restait marqué comme actif[6] dans la table de gestion d'Asgard[7]. La version 1.3.2 corrige ce comportement : le déclencheur est désormais paramétré pour être activé par les commandes DROP EXTENSION en plus des commandes DROP SCHEMA et les schémas supprimés seront in fine bien identifiés comme tels dans la table de gestion.

Amélioration du code

Asgard utilise dorénavant la fonction aclexplode(aclitem[]) (documentée à partir de PostgreSQL 12, mais qui existait déjà sous PostgreSQL 9.5) pour lire les valeurs de type aclitem[] qui décrivent les privilèges conférés sur les objets dans les tables du catalogue système. Référence GitHub : issue #2.

Cette évolution a donné lieu à l'ajout de la fonction utilitaire asgard_expend_privileges. La fonction asgard_role_trans_acl, qui n'est désormais plus utilisée que dans le cadre de la recette de l'extension, pourrait disparaître dans une version future.