Découvrir les bases de la sécurité aux niveaux des lignes (RLS)

6 janvier 2022

La RLS (row level security) ou SNL (sécurité aux niveaux des lignes) est une fonctionnalité sur Power BI qui permet de restreindre l'accès au niveau des lignes à une population d'utilisateurs définie à l'avance.

Dans l'exemple illustré ci-dessus, dont le besoin est fréquemment exprimé en entreprise, on souhaite que les employés d'une entreprise X ne puissent voir les ventes que de leur pays respectif. Par exemple, les salariés de la France ne doivent voir que les ventes de la France, et idem pour les Etats-Unis.

Dans le modèle de données de l'entreprise, cela se matérialise à travers une colonne [Country] et une colonne [Sales]. Notre objectif sera donc de filtrer les ventes en fonction de la valeur de la colonne [Country], puis d'appliquer ces filtres en fonction des profils, utilisateurs.

Retrouvez ici une petite vidéo explicative sur la RLS :

Il existe trois types de RLS, chacune répondant à un besoin précis et nécessitant un niveau de maintenance qui lui est propre.

  • La RLS dite "statique" est la plus simple à mettre en oeuvre, mais elle est la plus fastidieuse en termes de maintenabilité.
  • La RLS basée sur les Groupes Azure Active Directory, est proche de la première méthode, mais requiert moins de maintenance.
  • La RLS dynamique est la plus sophistiquée des trois méthodes, car elle ne nécessite à priori pas de maintenance.
  • Un quatrième type de sécurité nommé OLS (Object Level Security), introduit en 2021, permet de masquer des tables et des colonnes.

Les différents types de RLS

RLS Statique

Le premier type de RLS permet de créer un filtre que nous pourrons appliquer par la suite à un utilisateur donné, ce qui va restreindre la visibilité des données à une personne n’ayant pas le niveau d’accès requis. Le principal défaut de cette méthode est surtout en terme de maintenabilité, car il est possible pour certains rapports que l’on soit amenés à créer et gérer de centaines voire des milliers de rôles. Ce qui devient très vite ingérable, mais on peut résoudre ce problème avec les autres types de RLS.

Mise en place de la RLS Statique

  • La mise en place de la RLS débute en allant sur Power BI Desktop puis en allant sur Modélisation > Gérer les rôles.

 

Après cela, on va créer les rôles "Free" et "Orange" sur la table 'FTTH' avec une expression DAX. On filtre la colonne [Type] sur "Orange (OI - initiative privée)" et idem pour le rôle "Free" où l'on va filtrer sur "Free (OI - initiative privée)" .
Afin de tester l'efficacité de chaque rôle, aller sur Modélisation > Voir comme

 

On peut voir, ci-dessous, les rôles créés et on sélectionne le rôle à tester.

 

Test d'un rôle sur Power BI Desktop, ci-dessous on teste le rôle "Free"
  • Ensuite, on affecte le ou les rôles créés sur Power BI Service aux personnes dont on souhaite restreindre l'accès.
Application du rôle sur Power BI Service avec la méthode statique (on assigne les personnes au rôle dans la section "Members")

 

Application du rôle sur Power BI Service avec la méthode dynamique (on n'assigne aucune personne dans la section "Members")
  • Test du rôle sur Power BI Service

RLS basée sur des groupes Azure Active Directory (AAD)

Ce type de RLS fonctionne de la même manière que la RLS statique, mais il est plus simple à gérer au niveau de la population d'utilisateurs. 

Plutôt que de maintenir un grand nombre de rôles sur Power BI Desktop et d'y attribuer régulièrement de nouveaux membres individuels, on préférera attribuer des groupes de membres grâce à la fonction Groupe dans Azure Active Directory.

Voici ci-dessous un aperçu de différents groupes dans Azure Active Directory:

Voici la vue des membres d'un groupe Azure Active Directory (groupe Finance)

Affection du groupe Finance au rôle ProductsManagers_GoogleMaps

RLS Dynamique

Au contraire de la RLS statique, la RLS dynamique permet d’éviter de créer une multitude de rôles et de maintenir régulièrement une population d'utilisateurs. Pour ce type de système, le principe est très simple : il consiste à avoir un fichier contenant les différentes informations nécessaires sur les personnes concernées (nom de la personne, adresse mail, périmètre géographique et/ou métier) et sur les rôles que nous voulons leur appliquer. Sur la capture d'écran ci-dessous, le fichier s'exprime à travers la table de droite, 'Liste RR'.

Il n'y aura ensuite qu'un seul rôle à créer dans la partie modélisation de Power BI Desktop.

Et celui-ci fera appel à l'adresse mail de l'utilisateur dont la vue devra être restreinte.

On peut ensuite publier le rapport sur Power BI Service et se rendre dans la partie "Sécurité" du jeu de données associé. 

Contrairement à la RLS dite "statique", nous n'aurons pas besoin d'assigner des membres aux différents rôles que nous avons créés. Cela explique pourquoi la section de droite "Members" sur l'image ci-dessous reste vide.

Nous voyons bien que les données sont restreintes en fonction de l'adresse mail de l'utilisateur du rapport.

L'objectif de restreindre l'accès aux utilisateurs tout en minimisant l'effort de maintenance est donc rempli.

Object-Level Security

La sécurité au niveau de l'objet n'est disponible que depuis 2021 sur Tabular Editor.

Elle permet aux auteurs de modèles de sécuriser des tables ou des colonnes sensibles dans les navigateurs de rapports.

Par exemple, la colonne [Ventes] ou [Profits] d’un rapport de suivi financier peut être masquée à certains utilisateurs. Du point de vue d'un utilisateur n’ayant pas l’accès approprié, la table ou la colonne sécurisée n'existe pas.

De plus, les noms d'objet et les métadonnées sont sécurisés pour empêcher les utilisateurs malveillants de trouver un tel objet. Cette couche de sécurité supplémentaire vise à empêcher les utilisateurs sans niveau d'accès adéquat de révéler des informations personnelles critiques ou sensibles.

Pour en savoir plus sur les modifications du fonctionnement de la RLS et des rôles utilisateurs dans Power BI, cliquez ici.

Articles en relation

envelopephone-handset linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram