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 environ 4 ans. Mis à jour il y a presque 4 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.

Mis à jour par Leslie Lemaire il y a environ 4 ans

Ajout d'un avertissement dans la v4.0 de la documentation (partie II.2.C).

ASGARD est permissif sur le nommage des objets et tolère les noms qui ne respectent pas la forme canonique des identifiants PostgreSQL (majuscules, caractères spéciaux, espaces, etc.).
À deux exceptions près :
RÈGLE. Ne jamais utiliser le caractère « = » dans les noms de rôles. Ne jamais utiliser le caractère « % » dans les noms d’objets, quelle que soit leur nature.
D’une manière générale, il reste conseillé d’éviter les caractères spéciaux et tout particulièrement les guillemets simples et doubles, ainsi que les antislashs.

Mis à jour par Leslie Lemaire il y a presque 4 ans

  • Version cible changé de asgard--1.2.1 à asgard--1.3
Actions

Formats disponibles : Atom PDF