Filtrer l'accès aux données

Les filtres permettent de contrôler l'accès de sécurité à des valeurs de données dans le cube Essbase. Les filtres constituent la forme la plus fine de sécurité disponible. Les filtres désignent un ensemble de restrictions à des cellules d'un cube spécifiques ou à une plage de cellules. Les administrateurs ou les responsables affectent le filtre pour réguler l'accès des utilisateurs ou des groupes.

Votre propre rôle de sécurité détermine si vous pouvez créer, affecter, modifier, copier, renommer ou supprimer des filtres :

  • Si vous disposez du rôle Gestionnaire d'applications, vous pouvez gérer l'ensemble des filtres pour tous les utilisateurs ou groupes. Les filtres n'ont pas d'incidence pour vous.
  • Si vous disposez du rôle Mise à jour de la base de données, vous pouvez gérer les filtres pour les applications que vous avez créées.
  • SI vous disposez du rôle Gestionnaire de base de données, vous pouvez gérer les filtres dans vos applications ou cubes.
  • Si vous disposez du rôle Accès à la base de données (par défaut), vous avez accès en lecture aux valeurs de données dans toutes les cellules, sauf si votre accès est restreint par des filtres.

Créer un filtre à l'aide de l'interface Web Essbase

Dans la section de personnalisation de la base de données de l'interface Web Essbase, vous pouvez créer un filtre de sécurité limitant l'accès au cube aux utilisateurs ou aux groupes.

Vous pouvez créer plusieurs filtres pour un cube. Si vous modifiez un filtre, les modifications apportées à sa définition sont héritées par tous utilisateurs de ce filtre.

  1. Accédez à l'éditeur de filtre.
    1. Sur la page d'accueil, ouvrez l'application, puis la base de données (cube).
    2. Cliquez sur Filtres.
  2. Cliquez sur Ajouter.
  3. Saisissez un nom de filtre dans la zone de texte Nom du filtre.
  4. Dans l'éditeur de filtre, cliquez sur Ajouter.
  5. Sous Accès, cliquez sur le menu déroulant et sélectionnez un niveau d'accès.
    • Aucun (None) : aucune donnée ne sera extraite ou mise à jour.

    • Lecture (Read) : les données peuvent être extraites mais pas mises à jour.

    • Ecriture (Write) : les données peuvent être extraites et mises à jour.

    • Lecture des métadonnées (MetaRead) : les métadonnées (noms de dimension et de membre) peuvent être extraites et mises à jour.

      Le niveau d'accès Lecture des métadonnées (MetaRead) remplace tous les autres niveaux d'accès. Des filtres de données supplémentaires sont appliqués dans les filtres de lecture de métadonnées existants. Le filtrage sur des combinaisons de membres (à l'aide de relations AND) ne s'applique pas à l'accès Lecture des métadonnées (MetaRead). L'accès Lecture des métadonnées (MetaRead) filtre chaque membre de façon distincte (à l'aide d'une relation OR).

  6. Sélectionnez la ligne en dessous de la Spécification de membres et saisissez les noms des membres, puis cliquez sur Enregistrer.

    Vous pouvez filtrer les membres séparément ou par combinaison de membres. Indiquez des noms de membre ou dimension, des noms d'alias, des combinaisons de membres, des ensembles de membres qui sont définis par fonction, ou des noms de variable de substitution, qui sont précédés par une esperluette (&). Séparez les entrées par des virgules.

  7. Créez des lignes supplémentaires pour le filtre si besoin.

    Si les lignes de filtre se chevauchent ou sont en conflit, les spécifications de zone de cube plus détaillées s'appliquent à la place de celles moins détaillées. En outre, des droits d'accès plus souples s'appliquent à la place de ceux qui le sont moins. Par exemple, si vous accordez à un utilisateur l'accès Lecture (Read) à la valeur Actual et l'accès Ecriture (Write) à la valeur Jan, l'utilisateur dispose d'un droit d'accès en écriture à la valeur Jan Actual.

  8. Cliquez sur Valider pour vous assurer que le filtre est valide.
  9. Cliquez sur Enregistrer.

Pour modifier un filtre, sélectionnez le cube et cliquez sur l'option Filtres dans le panneau de gauche. Modifiez ensuite le filtre en cliquant sur son nom et en apportant vos modifications dans l'éditeur de filtre. Pour modifier une ligne existante, cliquez deux fois dessus.

Vous pouvez copier, renommer ou supprimer un filtre en cliquant sur le menu Actions à droite de son nom et en choisissant une option.

Après avoir créé des filtres, affectez-les à des utilisateurs ou des groupes.

Voir Contrôle d'accès aux cellules de base de données à l'aide de filtres de sécurité.

Création de filtres dynamiques efficaces

Vous pouvez créer des filtres dynamiques en fonction de données source externes afin de réduire le nombre de définitions de filtre nécessaires.

Au lieu de gérer un ensemble de filtres d'accès aux données codés en dur pour de nombreux utilisateurs, vous pouvez filtrer l'accès aux cellules de cube à partir de données source externes, en fonction des noms d'utilisateur et de membre.
Pour ce faire, utilisez les définitions de filtre dynamique, y compris la méthode @datasourceLookup, ainsi que les variables $LoginUser et $LoginGroup. Vos données source externes sont un fichier .csv ou une table relationnelle. Pour des données source relationnelles, vous pouvez charger le fichier .csv dans une table relationnelle.

Syntaxe de filtre dynamique

Utilisez la syntaxe de filtre dynamique pour créer des filtres flexibles que vous pouvez affecter à plusieurs utilisateurs et groupes.

Les lignes de filtre peuvent contenir les éléments suivants dans le cadre de la définition, ainsi que des expressions de membre.

$loginuser

Cette variable stocke la valeur de l'utilisateur connecté au moment de l'exécution. Elle peut être utilisée conjointement avec la méthode @datasourcelookup.

$logingroup

Cette variable stocke la valeur de tous les groupes auxquels appartient l'utilisateur actuellement connecté. Elle inclut les groupes directs et indirects. Lorsque vous l'utilisez conjointement à la méthode @datasourcelookup, chaque groupe est individuellement recherché dans la source de données.

@datasourcelookup

Cette méthode extrait des enregistrements à partir d'une source de données.

Syntaxe

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
Paramètre Description
dataSourceName

Nom de la source de données externe définie dans Essbase. Pour une source de données de niveau application, ajoutez au nom un préfixe contenant le nom de l'application et une période.

columnName

Nom de la colonne de source de données pour rechercher une valeur columnValue donnée.

columnValue

Valeur à rechercher dans columnName.

returnColumnName

Nom de la colonne de source de données à partir de laquelle renvoyer une liste de valeurs.

Remarques :

Les noms de colonne de source de données ne doivent pas utiliser de mots réservés SQL tels que USER, GROUP ou ROLE. L'utilisation de mots réservés peut entraîner des erreurs d'analyse SQL ou un comportement de filtre inattendu.

Description

Un appel @datasourcelookup est équivalent à la requête SQL suivante :

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookup recherche la source de donnée indiquée et recherche des enregistrements où columnName contient columnValue. Si vous spécifiez columnValue comme $loginuser, cette méthode recherche des enregistrements où columnName contient le nom de l'utilisateur actuellement connecté.

Essbase constitue la ligne de définition de filtre en associant les éléments de liste sous la forme d'une chaîne séparée par des virgules. Si un enregistrement contient des espaces, des caractères spéciaux ou uniquement des chiffres, ils sont placés entre guillemets.

Remarques :

Le paramètre @options peut être utilisé pour contrôler le comportement d'échec de la recherche. Lorsque strictLookup=true, les échecs de recherche sont traités comme des erreurs fatales et aucun résultat de filtre n'est renvoyé.

Exemples 

Placez les paramètres entre guillemets.

L'appel suivant recherche une source de données globale et renvoie la liste des noms de magasin où Mary est la responsable (store manager).

@datasourceLookup("StoreManagersDS","STOREMANAGER","Mary","STORE")

L'appel suivant recherche une source de données de niveau application et renvoie la liste des noms de magasin où l'utilisateur actuellement connecté est le responsable (store manager).

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")

L'appel suivant recherche une source de données de niveau application. Il renvoie ensuite la liste des noms de magasin où le service de magasin correspond à l'un des groupes auxquels appartient l'utilisateur connecté.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","$logingroup","STORE")

Si l'utilisateur connecté appartient à 3 groupes, la méthode @datasourcelookup ci-dessus renvoie toutes les valeurs des colonnes correspondantes pour chaque groupe.

L'exemple suivant utilise des fonctions SQL dans une expression de filtre dynamique.

@datasourceLookup("Sample.StoreManagersDS",LOWER(CAST("STOREMANAGER" AS VARCHAR(30))),LOWER("$loginuser"),"STORE")

L'exemple suivant effectue une évaluation sensible à la casse à l'aide de fonctions de casse explicites.

@datasourceLookup("Sample.StoreManagersDS",UPPER("STOREMANAGER"),UPPER("$loginuser"),"STORE")

L'exemple suivant renvoie les magasins appartenant au service Ventes ou Marketing.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","Sales","Marketing","STORE")

L'exemple suivant utilise une fonction de jeu de membres avec @datasourceLookup.

@DESCENDANTS(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE"))

L'exemple suivant utilise des fonctions d'ensemble de membres imbriquées avec une recherche de source de données.

@CHILDREN(@LSIBLING(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")))

L'exemple suivant utilise un comportement de recherche strict. En cas d'échec de la recherche, aucun résultat de filtre n'est renvoyé.

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE",@options(strictLookup=true))

Workflow pour la création de filtres dynamiques

Utilisez le workflow général suivant pour créer des filtres dynamiques.

Pour ce workflow de filtres dynamiques, il est supposé que vous avez déjà un cube, ainsi que des groupes et des utilisateurs provisionnés.

  1. Identifiez une source de données, s'il s'agit d'un fichier ou d'une source relationnelle.
  2. Définissez la connexion et la source de données dans Essbase, globalement ou au niveau de l'application.
  3. Créez des filtres au niveau du cube. Accédez au cube et choisissez Filtres.
  4. Définissez les lignes de filtre pour chaque filtre à l'aide de la syntaxe de filtre dynamique afin d'employer la variable $loginuser, la variable $logingroup et le mode @datasourcelookup, le cas échéant.
  5. Affectez les filtres à des utilisateurs ou à des groupes.
  6. Si vous avez affecté le filtre à un groupe, affectez le groupe à l'application à filtrer. Accédez à l'application et choisissez Autorisations.

Exemple de filtre dynamique

Le filtre dynamique suivant fonctionne avec le cube nommé Efficient.UserFilters, disponible dans la galerie comme exemple de modèle.


Filtre dynamique avec trois lignes octroyant à l'utilisateur connecté l'accès en lecture aux métadonnées.

Pour savoir comment créer et appliquer ce filtre dynamique, téléchargez le modèle de classeur Efficient_Filters.xlsx dans la section Technique de la galerie et suivez les instructions README du classeur. La galerie est disponible dans la section Fichiers de l'interface Web Essbase.