Projet

Général

Profil

Actions

Anomalie #342

ouvert

Caractères % dans les noms d'objets et = dans les noms de rôles

Ajouté par Leslie Lemaire il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Nouveau
Priorité:
Bas
Assigné à:
Version cible:
Début:
16/09/2020
Echéance:
% réalisé:

0%

Temps estimé:
# ref:

Description

DIAGNOSTIC

La présence de % dans les noms de schémas, rôles ou tout autre objet susceptible d'apparaître dans une requête GRANT/REVOKE est incompatible avec l'usage de la fonction format de PostgreSQL utilisée par ASGARD (notamment) pour générer lesdites requêtes GRANT/REVOKE.

Provoque des erreurs du type :

CREATE SCHEMA "a_%test" ;
UPDATE z_asgard.gestion_schema_usr
    SET lecteur = 'g_consult'
    WHERE nom_schema = 'a_%test' ;
-- pas de problème, car il n'y avait pas encore de
-- lecteur, donc ce sont les droits par défaut qui
-- sont appliqués et ils ne nécessitent pas format
UPDATE z_asgard.gestion_schema_usr
    SET lecteur = 'public'
    WHERE nom_schema = 'a_%test' ;
ERREUR : ERREUR: TA0 > spécificateur de type « t » pour format() non reconnu
DETAIL:
HINT: Pour un unique "%" utilisez "%%".
CONTEXT: fonction PL/pgsql z_asgard_admin.asgard_on_modify_gestion_schema_after(), ligne 751 à RAISE

La présence du caractère '=' dans un nom de rôle pose également problème, car les expressions régulières utilisées pour la lecteur des champs acl du catalogue donnent un sens particulier à ce signe. Il n'est pas certain que cela puisse provoquer des erreurs, mais ce n'est pas à exclure et il est également plausible que certaines transmissions de droits ne se fassent alors pas correctement. L'effet est en tout cas clairement visible avec la fonction asgard_diagnostic().

CREATE SCHEMA a_test ;
UPDATE z_asgard.gestion_schema_usr
    SET lecteur = 'g_lec=teur'
    WHERE nom_schema = 'a_test' ;
SELECT * FROM z_asgard_admin.asgard_diagnostic() ;

renvoie une anomalie "privilège TRIGGER supplémentaire pour le rôle g_lec=teur" visant le schéma a_test...

PISTES DE SOLUTION

Option 1 : blocage amont.

Ajouter aux event triggers asgard_on_alter_objet, asgard_on_create_objet, asgard_on_create_schema, asgard_on_alter_schema des tests pour vérifier l'absence du caractère "%" dans les noms des objets et "%" ou "=" dans les noms des rôles désignés comme propriétaires, et générer des erreurs le cas échéant.

Créer un event trigger sur GRANT/REVOKE et ALTER DEFAULT PRIVILEGES pour empêcher l'attribution de droits à des rôles avec % ou =.

Les fonctions qui prennent en charge le référencement devraient vérifier les noms des objets, du propriétaire et de tous les rôles qui ont des droits sur l'objet.

Option 2 : tester a posteriori.

Ajouter des tests d'erreurs dans les fonctions asgard_synthese_[...] permettrait de couvrir une bonne partie des cas. Il faudra identifier les (éventuels) cas d'usage de format (pour %) et des champs acl (pour =) dans d'autres circonstances.

Cela semble être le cas, mais il faudrait s'assurer que l'ADL sera toujours en mesure de corriger le nom problématique sans que cela ne porte à conséquence.

Actions

Formats disponibles : Atom PDF