

- Description
- Vue à travers un trou de serrure : on n'aperçoit que ce que l'ouverture laisse voir, ici un dôme au loin.
- Source
- Galen Crout · page d’origine
- Licence
- CC0 Domaine public
Sécurité RLS et accès
Ce thème mesure la maîtrise de qui voit quoi : sécurité au niveau des lignes (RLS, statique et dynamique), au niveau des objets (OLS), droits sur les espaces de travail, partage, accès aux…
En bref
Ce thème mesure la maîtrise de qui voit quoi : sécurité au niveau des lignes (RLS, statique et dynamique), au niveau des objets (OLS), droits sur les espaces de travail, partage, accès aux sources, et surtout la preuve que la sécurité fonctionne (tests de rôles, journaux). La conformité (RGPD, classification) est traitée côté matrice PD.
Niveau : 🟢→🔴 · Code thème : RLS
1. Pourquoi ce thème#
Une fuite de données dans un rapport est un incident de sécurité, pas un défaut d'affichage. La RLS d'un modèle sémantique ne s'applique qu'aux utilisateurs ayant le rôle de lecteur : un membre avec droit d'écriture sur l'espace de travail contourne la RLS (comportement documenté ; à revérifier selon version, état 2026-10). La RLS filtre, mais n'empêche pas les inférences (un total non filtré, un nombre de lignes, un visuel de décomposition). Coût de l'ignorer : exposition de données commerciales (marges, concurrents) ou personnelles.
2. Ce que mesure le thème#
- Axe : du partage ouvert à une sécurité conçue, testée et auditée.
- Indicateurs clés : part des modèles contenant des données sensibles protégés par rôle ; nombre de rôles testés automatiquement ; nombre d'utilisateurs avec droits d'écriture non justifiés ; délai de retrait des droits.
- Unités : %, jours.
3. Les 5 niveaux#
| Niveau | Nom court | Promesse | Indicateur type (ordre de grandeur) |
|---|---|---|---|
| 1 | Ouvert | Tous ceux qui ont le lien voient tout. | Aucun rôle ; partage par lien |
| 2 | Rôles statiques | Chaque groupe d'utilisateurs ne voit que son périmètre déclaré. | Rôles par périmètre ; groupes Entra |
| 3 | Dynamique | Chaque utilisateur voit son périmètre sans qu'on crée un rôle par personne. | 1 rôle dynamique + table de sécurité |
| 4 | Testé et journalisé | Une règle de sécurité mal écrite est détectée avant la production ; les accès sont traçables. | Test « voir en tant que » automatisé ; audit |
| 5 | Prouvé | La sécurité est démontrable à un auditeur, y compris contre les contournements courants. | Revue indépendante ; 0 écart sur 12 mois |
4. Jalons par niveau#
| ID | Jalon | Preuve vérifiable |
|---|---|---|
| BI-RLS-1.1 | L'accès aux rapports est limité aux personnes de l'organisation (pas de publication web) | Paramètres du locataire vérifiés |
| BI-RLS-1.2 | Les espaces de travail ont des propriétaires identifiés | Liste des admins |
| BI-RLS-1.3 | Les données sensibles sont repérées | Inventaire des colonnes sensibles |
| BI-RLS-2.1 | Rôles RLS définis sur les tables de dimension de périmètre | Rôles dans le modèle |
| BI-RLS-2.2 | Les membres des rôles sont des groupes (Entra), pas des comptes individuels | Affectations dans le service |
| BI-RLS-2.3 | Les droits sur les espaces suivent un moindre privilège (Lecteur par défaut) | Revue des rôles d'espace |
| BI-RLS-2.4 | Les partages « par lien » sont inventoriés et limités | Rapport d'audit des partages |
| BI-RLS-3.1 | Filtre dynamique par USERPRINCIPALNAME() sur une table de sécurité |
Expression de rôle + table |
| BI-RLS-3.2 | Direction de filtre de la sécurité vérifiée (propagation vers les faits ; bidirectionnel documenté) | Revue du modèle |
| BI-RLS-3.3 | Les mesures sensibles ne divulguent pas via totaux ou inférences | Cas de test d'inférence |
| BI-RLS-3.4 | Un cas « tous / aucun / plusieurs périmètres » est géré | Jeu de cas de sécurité |
| BI-RLS-3.5 | Les utilisateurs « virtuels » (administrateur, direction) sont traités explicitement | Rôle ou exception documentés |
| BI-RLS-4.1 | Tests « voir en tant que » rejoués à chaque livraison | Journal des tests de rôles |
| BI-RLS-4.2 | OLS pour masquer colonnes/tables sensibles quand nécessaire | Rôle OLS posé et testé |
| BI-RLS-4.3 | Journaux d'activité exploités (accès, exports) | Requête d'audit |
| BI-RLS-4.4 | Retrait des droits à la sortie d'un utilisateur dans un délai défini | Délai mesuré |
| BI-RLS-5.1 | Revue de sécurité indépendante annuelle | Rapport |
| BI-RLS-5.2 | La table de sécurité est alimentée par la source de vérité RH/organisation, automatiquement | Flux d'alimentation |
| BI-RLS-5.3 | Étiquettes de sensibilité propagées aux exports | Étiquettes vérifiées en aval |
| BI-RLS-5.4 | Aucun contournement connu : droits d'écriture, exports, API de requêtes | Matrice de contournements testée |
5. Lecture détaillée par niveau#
🟢 Niveau 1 — Ouvert#
- Signes : « tout le monde voit tout », rapports partagés par lien, exports libres.
- Gain : zéro friction. Ne garantit pas : la confidentialité.
- Difficulté : 1/5 · Effort : 1/5.
🟢 Niveau 2 — Rôles statiques#
-- Rôle « Région Nord » sur DIM_COMMERCIAL
[Region] = "Nord"
- Signes : un rôle par périmètre, membres = groupes. Simple, lisible, coûteux à maintenir quand les périmètres changent.
- Gain : première barrière réelle.
- Limite : explosion du nombre de rôles ; erreurs lors des mutations de personnel.
- Difficulté : 2/5 · Effort : 2/5.
🟡 Niveau 3 — Dynamique#
-- Rôle unique « Périmètre » sur la table de sécurité SEC_USER_PERIMETRE
[Email] = USERPRINCIPALNAME ()
La table de sécurité relie un utilisateur à ses commerciaux/secteurs ; la relation SEC → dimension propage le filtre jusqu'aux faits. Selon le modèle, une relation bidirectionnelle avec Appliquer le filtre de sécurité dans les deux sens est nécessaire, ce qui peut avoir des effets collatéraux : documenter chaque cas.
- Gain : maintenance par données, pas par déploiement.
- Limite : les totaux peuvent diverger entre utilisateurs (voulu) mais surprendre : un directeur voit un total supérieur à celui d'un manager.
- Difficulté : 3/5 · Effort : 3/5.
Fil rouge SFA : un commercial voit ses clients ; un manager voit les clients de son équipe, y compris ceux dont la responsabilité tourne dans l'année. La table de sécurité porte une période de validité ; un filtre sur la période s'ajoute à l'expression du rôle.
Symptôme : une mesure comptant les dimensions (ex. nombre de clients) varie selon l'utilisateur d'une façon inattendue. Cause : le rétro-filtrage des faits vers les dimensions sous RLS. Remède : tester chaque mesure de comptage sous chaque rôle ; ajuster la direction de filtre ou la mesure.
Symptôme : un administrateur voit tout en test et pense que la sécurité fonctionne. Cause : les droits d'écriture ignorent la RLS. Remède : tester avec un compte de lecteur réel ou « voir en tant que ».
🟡 Niveau 4 — Testé et journalisé#
- Signes : « voir en tant que » est un test de livraison ; les requêtes d'audit ont un propriétaire ; l'OLS cache les colonnes sensibles (marges) aux rôles non autorisés.
- Gain : une règle fausse est vue avant la prod.
- Limite : l'OLS peut casser des rapports qui référencent la colonne masquée ; le tester.
- Difficulté : 4/5 · Effort : 4/5.
Automatise le test par requête DAX exécutée avec identité effective (EffectiveUserName côté XMLA, ou test via API d'exécution de requêtes avec impersonation) et compare le résultat à un attendu : « l'utilisateur X ne doit voir que N clients ».
🔴 Niveau 5 — Prouvé#
- Signes : table de sécurité alimentée par la source RH, revue de sécurité indépendante, matrice de contournements (exports, abonnements, API, accès direct à la base ou au lakehouse) testée. La RLS du modèle ne protège pas la source : l'accès direct SQL ou OneLake doit être couvert séparément.
- Gain : preuve opposable.
- Limite : coût de maintenance et de coordination avec RH et sécurité.
- Difficulté : 5/5 · Effort : 5/5.
Mets la sécurité au plus près de la source quand c'est possible (RLS SQL, sécurité OneLake), et garde la RLS du modèle comme seconde couche : une seule couche = un seul point de défaillance.
Un assistant peut rédiger une expression de rôle ou générer des cas de test ; il ne mesure pas l'impact d'une direction de filtre sur vos totaux. Risque : exposer des données à un service d'IA sans cadre ; vérifier la politique de l'organisation (voir PD — sécurité).
6. Atteinte partielle et notation#
Règle commune. Un « 5 partiel » : revue indépendante faite une fois mais pas renouvelée (BI-RLS-5.1 = 0,5), table de sécurité alimentée automatiquement (5.2 = 1), étiquettes de sensibilité posées sur la moitié des modèles (5.3 = 0,5), contournements testés sur les exports mais pas sur l'accès direct à la source (5.4 = 0,5). Un jalon de sécurité à 0 bloque l'acquisition du niveau, quelle que soit la moyenne : c'est voulu.
7. Passer au niveau suivant#
Moyens possibles (facultatifs) :
| Passage | Leviers possibles |
|---|---|
| 1 → 2 | Inventaire des données sensibles ; rôles par groupe ; moindre privilège |
| 2 → 3 | Table de sécurité ; rôle unique ; jeu de cas limites |
| 3 → 4 | Tests « voir en tant que » en pipeline ; OLS ; journaux d'activité |
| 4 → 5 | Alimentation RH automatique ; revue externe ; matrice de contournements ; sécurité à la source |
Pièges :
- Faux positif : « la RLS est en place » mais les administrateurs et l'équipe projet ne la testent jamais avec un compte lecteur.
- Goodhart : compter les rôles ; un rôle « Tous » qui ne filtre rien rend la mesure creuse.
- Confondre confidentialité et masquage : cacher un visuel n'est pas sécuriser la donnée sous-jacente.
8. Voir aussi#
- Thèmes voisins : MOD · TST · GOV · IND
- Autres matrices : PD — sécurité, confidentialité, conformité · DL — sécurité
- Contenus : SQL Server SaaS — difficultés et pièges · OneLake — difficultés et pièges · Checklist de projet reporting
✻ Rédigé par Claude Sonnet 5.5