Enterprise Row-Level Security: A Blueprint for Scale in Fabric

Description

Managing RLS for 100s of users across multiple semantic models becomes chaos fast. We'll share a proven architecture for complex security—VPs see regions, managers see departments, reps see customers. Learn reusable RLS table design, AD Group patterns to prevent role sprawl, performance tips, and self-service access reports. Walk away with a blueprint from production managing 500+ users.

Key Takeaways

My Notes

Action Items

Slides

📥 Download Slides

Enterprise Row-Level
Security: A Blueprint
for Scale in Fabric
Karl Pover
Senior Solutions Architect
Axis Group
Power BI Row-Level Security (RLS): Current Situation
• Managing hundreds to thousands of users across multiple Semantic Models.
• Governing developers using inconsistent RLS data sources and custom DAX rules.
• Administering dozens of RLS Roles and Security Groups — or worse, individual user assignments.
What You'll Walk Away With
• A proven RLS architecture that scales to 100+
users.
• Practical guidance on sourcing user access data
and managing Security Groups.
• Reusable design patterns for RLS Mapping tables
and Semantic Model templates.
• A self-service data access lookup report and
monitoring recommendations.
• A look ahead at AI-assisted development and
testing.
RLS Overview
Semantic Model
Semantic Model
Semantic Model
RLS-Filtered Tables
UPN
Dim Key
jane.doe
john.smith
Semantic Model
RLS-Filtered Tables
UPN
Dim Key
jane.doe
john.smith
Semantic Model
RLS-Filtered Tables
UPN
Dim Key
jane.doe
john.smith
What Makes RLS “Enterprise”?
Enterprise RLS: Core Principles
REUSABLE
• Artifacts shared across multiple Semantic Models
• Templatized logic for consistent implementation
CENTRALLY MANAGED
• IT-managed process with business approval workflow
MONITORED
• Self-service permission visibility
• Group membership and access tracking
Reusable: What can be standardized?
Conformed Security Groups & RLS Roles
Defined once, applied consistently across all Semantic
Models.
Conformed RLS Tables
Centralized upstream as mapping tables in a Fabric
Lakehouse or Data Warehouse as a single source of
truth.
Power Query and RLS Role Patterns
Common Power Query and DAX rules packaged in a
Power BI template for consistent, accelerated
development.
Centrally Managed: Who does what?
IT
Provisions and maintains Security Groups, administers the
formal approval workflow, and manages the User Access data
source.*
Data Team
Develops RLS Mapping Views, defines RLS Roles, owns the
Semantic Model template, and manages the User Access data
source.*
Business
Requests and approves Security Group membership and user
access changes.
Monitored: Access Transparency
Self-Service Access Review
Users can view and verify their own access at
any time.
Business Owner & Data Steward Review
Designated owners have full visibility into user
access across their data domains.
Admin Audit
Administrators periodically audit Security
Group membership, flagging users assigned to
more than one group.
Architecture Decision Points
Key Decision Points for RLS Architecture
Source User Access Data from Existing Systems
Re-use existing sources to define what data users have access to see.
Single Group Membership per User
One group per user keeps access logic predictable and auditable.
Dedicated Security Group per RLS Role
• One group per role to maintain clear boundaries and avoid permission overlap.
• Options to scope Security Groups to a Workspace or share across multiple, based on governance requirements.
• Global access options to use a dedicated group and RLS Role with no DAX filters or handle global access within
existing roles with more complex DAX, choose based on maintainability.
Push RLS Filter Logic Upstream
Move filtering logic into RLS Mapping tables, reducing DAX to [Employee UPN] = USERPRINCIPALNAME().
Business User
Retrieving User Principal Names (UPNs)
UPNs ≠ Email Addresses
Power Query to extract UPNs in a Dataflow Gen2
Treat them as distinct identifiers to avoid incorrect access
mappings.
Use the Microsoft Graph API
Source UPNs directly to ensure accuracy and consistency with user
ID.
Join to Employee Data
Correlate UPNs to employee records using email address.
Where should to source security data?
Rating
Source
Best
ERP / CRM Security Tables
Pros
Cons
Permissions often already align; established user
management process already in place
Source tables may be inaccessible or encrypted
Better
Employee HR Attributes
Data already exists; often already in Fabric
May be depended on by other processes; HR
unlikely to take on additional responsibility; limited
to certain dimensions
Better
Employee HR Hierarchy
Same as above; supports managerial visibility into
direct reports
Doesn't account for non-managerial roles needing
broader access
Better
Employee Fields on Dimension Tables
Data already exists; motivates data accuracy;
business owns access
Limited to few dimension tables; typically only one
employee field per record
Better
Customer Contact Tables
Same as above; supports M:M employee-tocustomer relationships
Not available on all dimension tables
Good
CRUD Interface in Fabric
Fully independent; precisely tailored to reporting
needs
Tool and data must be built from scratch
Independent; quick to set up and modify
Prone to becoming stale; structure easily broken;
analytics team likely owns maintenance; data
must be entered from scratch
OK
SharePoint List / Excel ️
Security data can come from different sources depending on role
Role
Definition
Source
Sales org-level
Filter by branch ID for branch and division managers to review sales and finance
metrics.
ERP / CRM Security Tables
Employee-level
Filter ️by ️employee ️ID ️for ️managers ️to ️review ️their ️directs’ ️performance
Employee HR Hierarchy
Customer-level
Filter ️by ️customer ️ID ️for ️sales ️reps ️to ️review ️their ️customers’ ️sales. ️Based ️on ️
Sales Rep field on D_Customer table.
Employee Fields on Dimension Tables
Customer-level
Filter by customer ID for sales support team based on if they are in the customer
contact table.
Customer Contact Tables
Security Group Patterns
Why Create New Security Groups Just for RLS
DO
• Always assign access through Security Groups — never assign
individual users directly to roles.
• One dedicated Security Group per RLS Role.
• Establish and enforce consistent naming conventions across all
Security Groups.
• Empower the business to own and manage Security Group
membership.
RLS Role
Security Group
Global
PBI-VIEWER-RLS-GLOBAL
Sales Organization Level PBI-VIEWER-RLS-SALE_ORG-LVL
Customer Level
PBI-VIEWER-RLS-CUST-LVL
Product Level
PBI-VIEWER-RLS-PROD-LVL
DON'T
• Repurpose or reuse existing Security Groups not originally
designed for RLS.
Security Group Naming Convention Pattern
Pattern: [Tool Identifier]-[Workspace Name (Optional)]-[Workspace Role]-[RLS Role]
Tool Identifier
Workspace (Optional)
Workspace Role
RLS Role
PBI
WS-SALES
VIEWER
RLS-GLOBAL
FABRIC
WS-FINANCE
APP_AUDIENCE
RLS-SALE_ORG-LVL
WS-PURCHASING
RLS-CUST-LVL
RLS-PROD-LVL
Key Points
• Self-documenting - The name alone communicates the tool, Workspace role, and RLS Role
immediately.
• Simplifies auditing by making Workspace and RLS role assignments immediately visible.
• *Workspace name is optional — include only when the group is scoped to a specific Workspace.
Example: PBI-SALES-VIEWER-RLS-GLOBAL vs. PBI-VIEWER-RLS-GLOBAL
RLS Security Groups Patterns
Workspace-Specific RLS Security Groups
Scenario-Specific RLS Security Groups
Workspace
RLS Role
Security Group
RLS Role
Security Group
Sales
Global
PBI-WS-SALES-VIEWER-RLS-GLOBAL
Global
PBI-VIEWER-RLS-GLOBAL
Sales Org Level
PBI-WS-SALES-VIEWER-RLS-SALE_ORGLVL
Sales Organization Level
PBI-VIEWER-RLS-SALE_ORG-LVL
Customer Level
PBI-WS-SALES-VIEWER-RLS-CUST-LVL
Customer Level
PBI-VIEWER-RLS-CUST-LVL
Product Level
PBI-WS-SALES-VIEWER-RLS-PROD-LVL
Product Level
PBI-VIEWER-RLS-PROD-LVL
Global
PBI-WS-FINANCE-VIEWER-RLS-GLOBAL
Sales Org Level
PBI-WS-FINANCE-VIEWER-RLSSALE_ORG-LVL
Customer Level
PBI-WS-FINANCE-VIEWER-RLS-CUST-LVL
Finance