Row-Level Security & Access Control
Implement row-level security (RLS) to control who sees which data, assign workspace roles, configure item-level and semantic model access, and manage RLS group membership.
Controlling who sees what
Think of a hotel with different room keys. Everyone can enter the lobby (the report). But only North Region managers can open the North Region data room, and only South Region managers can open theirs. Same building, different access.
Row-Level Security (RLS) filters data rows based on whoβs viewing the report. A regional manager sees only their regionβs data. A department head sees only their department. The report is the same β but the data is different for each viewer.
Workspace roles
| Role | Can View | Can Edit/Publish | Can Share | Can Manage |
|---|---|---|---|---|
| Viewer | β | β | β | β |
| Contributor | β | β | β | β |
| Member | β | β | β | β |
| Admin | β | β | β | β (add/remove users, delete workspace) |
Riley at Coastal Fresh (π) assigns roles:
- Admin: Herself and the BI team lead
- Member: Department heads (can share reports with their teams)
- Contributor: Data analysts who build new reports
- Viewer: Store managers and regional managers who consume dashboards (RLS applies to Viewers)
Important: RLS only restricts users with the Viewer role. Admin, Member, and Contributor bypass RLS entirely. If you need RLS to apply to someone, they must be a Viewer β or consume content through an app.
Item-level and semantic model access
Item-level access grants permissions on individual reports or dashboards without giving workspace access:
- Share a single report with a specific person
- They see the report but not other workspace content
Semantic model access (Build permission) allows others to create new reports using your published dataset:
- Build permission β user can create their own reports on top of your model
- Without Build permission β user can view reports but canβt build new ones
Dr. Ethan at Bayview Medical (π₯) grants Build permission on the patient dataset to the quality team β they can build their own reports without accessing the clinical dashboard workspace.
Row-Level Security (RLS)
Step 1: Define roles in Power BI Desktop
Modeling β Manage roles β New role
Each role has a name and one or more DAX filter expressions on tables.
Example: Riley creates a role for each region:
North Region role:
[Region] = "North"
South Region role:
[Region] = "South"
Dynamic RLS uses the userβs identity instead of hardcoding values:
[ManagerEmail] = USERPRINCIPALNAME()
This filters the data to rows where the ManagerEmail column matches the logged-in userβs email. One role, works for everyone.
Step 2: Test roles in Desktop
Modeling β View as β select a role to preview what that user sees. Always test before publishing.
Step 3: Assign membership in the Power BI service
After publishing, go to the semantic model β Security β select the role β add users or security groups.
Kenji at Apex Manufacturing (π) uses dynamic RLS: each factory managerβs email is in the FactoryManager column. He creates one role with [FactoryManager] = USERPRINCIPALNAME() and adds all managers to that role. Each manager sees only their factoryβs data.
Exam tip: static vs dynamic RLS
Static RLS: Hardcoded filter values per role. Requires separate roles for each group.
Role: "North" β [Region] = "North"
Role: "South" β [Region] = "South"Dynamic RLS: Uses USERPRINCIPALNAME() or USERNAME() to filter based on the logged-in user. One role handles everyone.
Role: "RegionManager" β [ManagerEmail] = USERPRINCIPALNAME()The exam strongly tests dynamic RLS. Look for scenarios with a mapping table that connects user emails to data access permissions.
RLS with security groups
Instead of adding individual users to RLS roles, use Azure AD (Entra) security groups:
- Create a security group:
SG-PowerBI-NorthRegion - Add North region managers to the group
- Assign the group to the βNorth Regionβ RLS role
This scales much better β when a new manager joins, add them to the group instead of modifying Power BI settings.
| Feature | Individual Users | Security Groups |
|---|---|---|
| Management | Add/remove each person manually | Manage membership in Entra β automatic in Power BI |
| Scale | Difficult at 50+ users | Handles thousands easily |
| Best practice | Development/testing only | Always use for production |
Knowledge check
Kenji has 12 factory managers, each managing one factory. He wants each manager to see only their factory's data. What's the most scalable approach?
Dr. Ethan wants to grant the quality team the ability to create their own reports using the patient dataset β but not access the clinical dashboard workspace. What should he configure?
π¬ Video coming soon
Next up: Sensitivity Labels and Governance β protect your data with Microsoft Purview integration.