Tableaux de bord

Row Level Security

Cette page est une ébauche. Vous devrez la déchiffrer en attendant que je trouve le temps de la compléter :(

Introduction

Qu'est-ce que la RLS?

La RLS, ou Row-Level Security, est une méthode qui restreint l'accès aux données dans une base de données ou un environnement de BI selon les caractéristiques de l'utilisateur. Elle permet aux administrateurs de contrôler qui peut voir quelles données dans une même table ou un même rapport. C'est particulièrement utile lorsque certaines données sensibles ou privées ne doivent être accessibles qu'à certains utilisateurs.

Quelle est la différence avec le RBAC?

La RLS dans Power BI permet de contrôler l'accès aux lignes de données selon l'utilisateur qui consulte le rapport. Vous pouvez créer des filtres dans des rôles définis dans Power BI Desktop; lorsque les utilisateurs se connectent à Power BI, ils ne voient que les données correspondant à ces filtres.

Le RBAC, ou Role-Based Access Control, est plus large et contrôle l'accès à des niveaux plus élevés de l'environnement Power BI, pas seulement au niveau des données. Le RBAC sert à gérer qui a accès aux espaces de travail, rapports et dashboards, ainsi que les opérations permises, comme lire, écrire, partager ou supprimer.

Comment activer la RLS

Ce dont vous aurez besoin

La "table des utilisateurs" doit être implémentée selon votre propre logique d'affaires. Dans cet exemple, nous supposons que l'identification se fait avec l'adresse courriel utilisée pour se connecter à Power BI. Si vous utilisez une autre méthode d'authentification, vous devrez adapter l'exemple.

La table users

La table users associe chaque utilisateur ayant accès aux données avec les données qu'il peut voir. Elle devrait être structurée ainsi:

  • user_id: l'identifiant unique de l'utilisateur, qui peut être rattaché à un élément du payload d'authentification Power BI.
  • scope: la portée des données disponibles pour l'utilisateur. C'est une chaîne utilisée pour filtrer les données de reporting.

Comment configurer la RLS?

La RLS est implémentée en ajoutant la user_table à votre dashboard Power BI et en la joignant, par jointure interne, à la table de reporting. La user_table peut ensuite filtrer les données de la table de reporting selon les droits accordés à l'utilisateur. Pour cela, vous devez créer un nouveau rôle dans votre dashboard Power BI et ajouter un filtre à la table de reporting qui limite les données selon le scope de l'utilisateur.

  1. Assurez-vous que votre modèle de données contient les colonnes nécessaires pour définir les filtres RLS. En pratique, les dimensions auxquelles vous voulez appliquer la RLS doivent être disponibles dans la table de reporting et dans la user_table. La user_table doit aussi inclure une colonne d'identification principale de l'utilisateur, ici la colonne email.
  2. Importez la user_table dans votre dashboard Power BI et créez une relation entre la user_table et les tables de reporting. La jointure doit se faire sur la colonne de portée.
  3. Créez et gérez un rôle:
    1. Dans Power BI Desktop, cliquez sur l'onglet Model, puis sur Manage Roles.
    2. Cliquez sur Create pour créer un nouveau rôle.
    3. Dans la boîte de dialogue Manage roles, entrez un nom de rôle, puis cliquez sur Add Table Filter.
    4. Dans la boîte Table Filter DAX Expression, entrez une expression DAX qui filtre les données selon l'adresse courriel de l'utilisateur. Cela sert à filtrer la table des utilisateurs sur la personne qui consulte actuellement le dashboard. Par exemple:
     'user_table'[email] = USERPRINCIPALNAME()
    
    1. Cliquez sur OK pour enregistrer l'expression DAX.
    2. Cliquez sur Save pour enregistrer le rôle.
    3. Cliquez sur Close pour fermer la boîte Manage roles.
    4. Publiez le rapport dans le service Power BI.

Exemple: implémenter la RLS au niveau de l'école

Dans cet exemple, nous implémentons la RLS pour restreindre l'accès aux données selon l'adresse courriel de l'utilisateur, afin que chaque utilisateur ne voie que les données de l'école à laquelle il est associé.

Étape 1: créer la table users

La table users devrait contenir les colonnes suivantes:

  • email: l'adresse courriel de l'utilisateur
  • school: l'école associée à l'utilisateur

Étape 2: implémenter la RLS dans Power BI

  1. Importez la table users dans votre dashboard Power BI et créez une relation entre la table users et les tables de reporting. La jointure doit se faire sur la colonne school. C'est le point important: si votre table de reporting NE contient PAS de colonne school, vous ne pourrez pas joindre la user_table et vous ne pourrez pas appliquer de RLS à cette table.
  2. Créez un rôle:
    1. Dans Power BI Desktop, cliquez sur l'onglet Model, puis sur Manage Roles.
    2. Cliquez sur Create pour créer un nouveau rôle.
    3. Dans la boîte de dialogue Manage roles, entrez un nom de rôle, puis cliquez sur Add Table Filter.
    4. Dans la boîte Table Filter DAX Expression, entrez une expression DAX qui filtre les données selon l'adresse courriel de l'utilisateur. Par exemple:
     user_table['email'] = USERPRINCIPALNAME()
    
    1. Cliquez sur OK pour enregistrer l'expression DAX.
    2. Cliquez sur Save pour enregistrer le rôle.
    3. Cliquez sur Close pour fermer la boîte Manage roles.
    4. Publiez le rapport dans le service Power BI.

Pourquoi ça fonctionne?

Voici ce qui se passe lorsqu'un utilisateur consulte le rapport, au coeur du moteur Power BI:

  1. L'utilisateur se connecte à Power BI avec son courriel et le rapport s'affiche.
  2. Power BI assigne USERPRINCIPALNAME() au courriel de l'utilisateur.
  3. L'expression DAX du rôle est évaluée, et la user_table est filtrée sur le courriel de l'utilisateur.
  4. Les tables jointes à la user_table sont maintenant filtrées selon ce courriel, et l'utilisateur ne voit que les données de l'école à laquelle il est associé.

Note sur USERPRINCIPALNAME()

USERPRINCIPALNAME() est une fonction DAX qui retourne l'adresse courriel de l'utilisateur actuellement authentifié. Cette fonction est disponible seulement dans le service Power BI, pas dans Power BI Desktop. Une fois le rapport publié dans le service Power BI, USERPRINCIPALNAME() retourne le courriel de l'utilisateur qui consulte le rapport. C'est utile pour filtrer les données selon l'adresse courriel.

Mon client veut une RLS au niveau de l'école, mais aussi au niveau de la classe. Comment faire?

Implémenter la RLS sur plusieurs colonnes est en fait assez simple: l'astuce consiste à transformer la jointure multi-colonnes en jointure sur une seule colonne. "Si on n'a pas de problème au départ, on n'a pas besoin de chercher une solution" - Confucius, probablement pas, mais l'idée tient.

Comme Power BI ne gère pas les jointures multi-colonnes, il faut concaténer les colonnes de jointure dans une seule colonne. Pour cela, créez une nouvelle colonne dans toutes vos tables de reporting et dans vos tables user_table. La colonne unique peut être créée en concaténant simplement les colonnes à joindre. Bien sûr, l'ordre de concaténation doit être exactement le même dans la user_table et dans la table de reporting, sinon la jointure ne fonctionnera pas. Si vous voulez faire plus élégant, vous pouvez le faire en SQL AVANT d'importer les données et utiliser le hachage de la concaténation comme colonne de jointure au lieu de la concaténation elle-même, afin d'économiser quelques précieux octets de mémoire.

Copyright © 2026