Security Best Practices in Microsoft Fabric
Microsoft Fabric
Microsoft Fabric12 min read

Security Best Practices in Microsoft Fabric

Secure your Microsoft Fabric environment with proper access controls, workspace roles, row-level security, and data classification governance policies.

By Errin O'Connor, Chief AI Architect

Security in Microsoft Fabric operates at five distinct layers—tenant, capacity, workspace, item, and data—each providing progressively finer-grained access control. A comprehensive Fabric security strategy addresses all five layers, because a gap at any level creates exposure. Organizations in regulated industries (healthcare, finance, government) face additional compliance requirements that make layered security not just a best practice but a regulatory mandate. Our Microsoft Fabric consulting team implements security architectures for enterprises where data breaches carry regulatory penalties, reputational damage, and legal liability.

I have been designing security architectures for enterprise data platforms for over 25 years, and the most common mistake I see is treating security as a single layer—typically workspace permissions. Teams set up workspace roles, consider security "done," and move on. Six months later, they discover that a contractor with Viewer access to a workspace can export underlying data containing PII, that a bidirectional relationship in a Power BI model bypasses row-level security, or that a Spark notebook has hardcoded credentials to a production database. Layered security prevents these scenarios by ensuring that a failure at one layer is caught by controls at another.

The Five Security Layers in Microsoft Fabric

LayerScopeControlsPrimary Admin
TenantEntire organizationTenant settings, conditional access, DLPFabric Admin / Global Admin
CapacityCompute resourcesCapacity admin roles, auto-scaling limitsCapacity Admin
WorkspaceContent containersWorkspace roles (Admin, Member, Contributor, Viewer)Workspace Admin
ItemIndividual artifactsItem-level sharing, per-item permissionsItem Owner
DataRow and column levelRow-level security (RLS), column-level security (CLS), object-level security (OLS)Data Modeler / Security Admin

Each layer narrows access further. A user must pass all five layers to access specific data:

  1. Tenant: Are Fabric features enabled for this user's security group?
  2. Capacity: Is this user's workspace assigned to a capacity they can access?
  3. Workspace: Does this user have an appropriate workspace role?
  4. Item: Has this specific report/dataset been shared with this user?
  5. Data: Does row-level security allow this user to see these specific rows?

Layer 1: Tenant-Level Security

Tenant settings are the broadest security controls. Key security-relevant settings:

SettingSecurity ImpactRecommended Configuration
Export data controlsDetermines what data can leave FabricRestrict underlying data export; allow aggregated exports for business users
External sharingControls sharing outside your Azure AD tenantRestrict to specific security groups
Publish to webMakes content publicly accessibleDisable in all enterprise environments
Custom visual restrictionsCustom visuals can access data in the visualAllow only certified/organizational visuals
Sensitivity labelsInformation classification and protectionEnable with mandatory labeling policy
Conditional AccessAzure AD policies for device/location requirementsRequire compliant devices, block risky sign-ins

Conditional Access policies are critically important and often overlooked. They allow you to enforce: - Multi-factor authentication for all Fabric access - Access only from compliant/managed devices - Block access from untrusted locations or countries - Require terms of use acceptance - Session controls (sign-out after inactivity)

Configure Conditional Access in Azure AD (now Entra ID) and target the Power BI and Microsoft Fabric cloud apps.

Layer 2: Capacity-Level Security

Capacity security controls who can administer and use Fabric capacity resources:

RolePermissionsTypical Assignees
Capacity AdminAssign workspaces, configure settings, view metricsPlatform team leads
Capacity ContributorAdd workspaces to capacity (cannot remove or configure)Department leads

**Security consideration**: Capacity isolation is a physical security boundary. Workspaces on different capacities cannot share compute resources. For regulated data, use dedicated capacities to ensure that sensitive workloads do not share infrastructure with general-purpose analytics. See our capacity planning guide for multi-capacity architecture patterns.

Layer 3: Workspace-Level Security

Workspace roles are the primary content access control mechanism:

RoleCreate/EditDelete Others' ContentShareManage Permissions
AdminYesYesYesYes
MemberYesNoYesNo
ContributorYesNoNoNo
ViewerNoNoNoNo

Best practices for workspace security:

  • Use Azure AD security groups exclusively. Never assign individual users to workspace roles. Security groups enable centralized management and audit trails.
  • Minimize Admin and Member assignments. 2-3 Admins per workspace maximum. Members should be limited to active developers.
  • Separate dev/test/prod workspaces. Developers have Member access to dev workspaces but only Viewer access to production. This prevents accidental production changes.
  • **Audit workspace access quarterly.** Use the Admin API to export workspace role assignments and review with workspace owners.

See our workspace design guide for detailed patterns on workspace structure and access management.

Layer 4: Item-Level Security

Item-level permissions provide granular access to individual artifacts without granting workspace-wide access:

Sharing MethodUse CasePermissions Granted
Direct share (report)Share a specific report with a colleagueView report + underlying data through report visuals
Direct share (semantic model)Share dataset for Build permissionBuild new reports on the shared dataset
App distributionDistribute curated content to business usersView-only access to app contents
Link sharingGenerate a shareable URLView access with optional edit permission
EmbedEmbed in Teams, SharePoint, or custom appView access within embedded context

App distribution is the recommended method for delivering content to large audiences. Apps provide: - Curated content packages (selected reports, not everything in workspace) - Separate permissions from workspace roles (app viewers do not need workspace access) - Automatic updates when source content changes - Navigation structure that guides users to the right reports

Key security gap: When you share a report, the recipient can see all data in the report—unless RLS is configured. Sharing a report does not automatically restrict data to the recipient's scope. This is the most common security misunderstanding in Power BI deployments.

Layer 5: Data-Level Security

Data-level security is the most granular and most critical layer, especially for multi-tenant or role-based access patterns.

Row-Level Security (RLS)

Row-level security restricts which rows a user can see based on their identity:

RLS PatternImplementationUse Case
Static RLSHardcoded filter in role definitionRegion = "West" for West team users
Dynamic RLSUSERNAME() or USERPRINCIPALNAME() in DAX filterEach user sees only their own data
Manager hierarchyParent-child relationship with username mappingManagers see their team's data
Custom security tableMapping table: User → allowed dimension valuesFlexible, maintainable at scale

Dynamic RLS with a security table is the enterprise-recommended pattern:

Create a UserSecurity table with columns: UserEmail, DimensionKey (e.g., RegionKey, DepartmentKey). Create a relationship from UserSecurity to your dimension table. Define the RLS role with a DAX filter on UserSecurity that checks USERPRINCIPALNAME() = UserSecurity[UserEmail].

This pattern is maintainable because adding or changing user access only requires updating the UserSecurity table—no DAX modifications needed. For detailed implementation patterns, see our dynamic RLS guide.

Object-Level Security (OLS)

OLS hides specific tables or columns from certain roles:

OLS Use CaseImplementationEffect
Hide salary data from non-HR usersOLS role restricting Salary column accessColumn not visible in reports or DAX
Hide financial projections from general usersOLS role restricting Forecast tableTable not accessible in any context
Restrict PII columnsOLS role hiding SSN, DOB columnsColumns invisible even in data export

OLS is configured in Tabular Editor (not available in Power BI Desktop UI). It complements RLS by hiding entire columns/tables rather than filtering rows. This is essential for HIPAA-compliant analytics where certain data elements (SSN, medical record numbers) must be completely inaccessible to unauthorized users.

Column-Level Security (CLS) in Fabric Warehouse

The Fabric SQL Warehouse supports T-SQL GRANT and DENY at the column level:

CLS MethodSyntaxUse Case
DENY SELECT on columnDENY SELECT ON dbo.Table(Column) TO RoleBlock specific columns
GRANT SELECT on specific columnsGRANT SELECT ON dbo.Table(Col1, Col2) TO RoleAllow only specific columns
Dynamic Data MaskingCREATE TABLE with MASKED column definitionShow masked values (e.g., XXX-XX-1234)

Security for Specific Fabric Workloads

Lakehouse Security

Security ControlImplementationNotes
Workspace RBACStandard workspace roles applyControls who can access Lakehouse items
SQL endpoint RLST-SQL security policies on SQL endpointApplies when querying via SQL
OneLake file accessWorkspace role controls file accessNo file-level ACLs currently
Shortcut securitySource permissions applyOneLake shortcuts inherit source security

Notebook Security

RiskMitigation
Hardcoded credentials in notebook codeUse Azure Key Vault references
Notebook outputs visible to workspace viewersUse separate dev/prod workspaces
PIP install of malicious packagesRestrict allowed packages via workspace libraries
Data exfiltration via notebook outputMonitor notebook runs via audit logs

Pipeline Security

RiskMitigation
Connection credentials exposedUse managed identities or Key Vault
Pipeline runs accessing unauthorized dataScope service principal permissions
Pipeline output to unsecured locationsValidate destination security before pipeline deployment

Security Monitoring and Auditing

Audit SourceWhat It CapturesAccess Method
Unified Audit LogAll user and admin activities in FabricMicrosoft 365 Compliance Center
Power BI Activity LogReport views, exports, sharing actionsAdmin API: Get-PowerBIActivityEvent
Capacity MetricsResource consumption per workspaceCapacity Metrics app
Azure AD Sign-in LogsAuthentication events, conditional access resultsAzure AD portal
Sensitivity Label ActivityLabel application and changesMicrosoft Purview compliance portal

**Automate security monitoring** by exporting audit logs daily to a Fabric Lakehouse. Build a security monitoring dashboard that tracks: - Failed access attempts and unusual access patterns - High-volume data exports (potential data exfiltration) - Sensitivity label downgrades (potential classification violations) - New external sharing events (potential unauthorized sharing) - Workspace permission changes (access control modifications)

Security Configuration Checklist

PrioritySecurity ControlStatus
P0Disable Publish to web
P0Restrict underlying data export
P0Enable sensitivity labels with mandatory policy
P0Configure Conditional Access (MFA, device compliance)
P1Restrict workspace creation to security groups
P1Implement RLS on all datasets with sensitive data
P1Configure OLS for PII columns
P1Enable audit logging and export to Lakehouse
P2Restrict external sharing to security groups
P2Review and remove custom visual permissions
P2Implement security monitoring dashboard
P2Schedule quarterly access reviews

Common Security Mistakes

Mistake 1: Relying solely on workspace permissions Workspace Viewer can see ALL content in the workspace. Without RLS, a regional manager can see all regions' data. Always implement RLS when data access should be scoped by user identity.

Mistake 2: Not testing RLS RLS rules must be tested with "View as Role" in Power BI Desktop before deployment. Untested RLS rules frequently have gaps—especially around handling blank filter contexts.

Mistake 3: Bidirectional relationships breaking RLS Bidirectional cross-filtering can allow RLS filters to propagate in unexpected directions, potentially exposing data. Test thoroughly and prefer single-direction relationships.

Mistake 4: Ignoring export controls A user with report access can export underlying data to Excel unless export restrictions are configured at the tenant level. This is the most common data leakage vector in Power BI.

Mistake 5: No audit logging Without audit logging, you cannot detect or investigate security incidents. Enable logging before users access the system, not after an incident occurs.

Getting Started with Fabric Security

  1. Assess current state: Audit existing workspace permissions, sharing, and RLS configurations
  2. **Implement tenant settings**: Follow our tenant settings guide for security-critical configurations
  3. **Design workspace architecture**: Use our workspace design patterns for proper isolation
  4. Implement data-level security: Configure RLS, OLS, and CLS for sensitive data
  5. Enable monitoring: Set up audit logging and security dashboards
  6. Schedule reviews: Quarterly access reviews and annual security assessments

For organizations that need comprehensive Fabric security implementation, our Fabric consulting team provides security assessments, architecture design, RLS implementation, and compliance documentation. We specialize in regulated industries where security gaps carry legal and financial consequences. Contact us to discuss your Fabric security needs.

Frequently Asked Questions

What compliance certifications does Fabric support?

Microsoft Fabric supports SOC 1/2, ISO 27001, HIPAA (with Business Associate Agreement), GDPR, and FedRAMP in applicable regions. Check Microsoft compliance documentation for current certifications.

How does row-level security work in Fabric?

RLS uses DAX expressions to filter data based on user identity. You define roles in semantic models with filter expressions, then assign users to roles in Power BI Service. Filters apply across all reports using that model.

Microsoft FabricSecurityGovernanceCompliance

Industry Solutions

See how we apply these solutions across industries:

Need Help With Power BI?

Our experts can help you implement the solutions discussed in this article.

Ready to Transform Your Data Strategy?

Get a free consultation to discuss how Power BI and Microsoft Fabric can drive insights and growth for your organization.