Insight · Microsoft Fabric

    The Microsoft Fabric Security Model: Who Can See What, and Where You Set It

    Workspace roles, item permissions, OneLake data access, RLS, labels: Fabric secures data at several layers that compose in non-obvious ways. A working map of the model and the order to configure it.

    Nick de Vrye, CTOPublished 7 September 20267 min read read
    Navy Solv Systems title card reading 'The Fabric Security Model' with a shield and check motif.

    In Short: Layers That Compose, Gaps That Surprise

    Fabric's security model is genuinely capable and genuinely layered: workspace roles, item permissions, OneLake data access roles, engine-level controls (row-level and object-level security), and Purview sensitivity labels on top. Each layer is simple alone. The surprises live in composition - what wins when layers disagree, and which paths bypass which controls.

    This is the working map we use on engagements, with the classic gaps named, because in the AI era a permissions mistake no longer waits quietly: Copilot and agents find it conversationally.

    Layer 1: Workspace Roles, the Coarse Grain

    Every workspace assigns four roles: Admin (everything, including access management), Member (publish and share), Contributor (create and edit), Viewer (consume). Roles apply workspace-wide: a Viewer sees, broadly, everything in the workspace.

    The design consequence: workspaces are the primary security boundary, so estates that need different audiences need different workspaces - which is why medallion layers and domains map to workspace structure. Stuffing mixed-sensitivity content into one workspace and patching with exceptions is the original sin of most Fabric security audits.

    Layer 2: Item Permissions and OneLake Data Access

    Item sharing grants access to a single item - a report, a lakehouse, a model - without workspace membership, each share carrying specific capabilities (view, build a model on it, read the SQL endpoint, read OneLake files directly).

    OneLake data access roles go finer: named roles scoped to particular folders or tables inside a lakehouse, granted to users or groups. This is the answer to "the analysts may read gold, nobody reads bronze" without multiplying lakehouses. The pattern that works: default-deny the lake, define roles per consumption boundary, grant to groups rather than individuals.

    Layer 3: Engine Controls - RLS, OLS and the Classic Gap

    Warehouses support SQL-native security; semantic models support row-level security and object-level security, filtering what each user's queries return.

    The gap every estate must internalise: model RLS protects the model's front door only. A user who also holds SQL endpoint access or OneLake read on the underlying tables walks around the filter. So enforce data-level restrictions at the layer users actually reach: RLS in the semantic model for report consumers, matching restrictions (or no direct access at all) beneath it. Then test with representative accounts - under report access and under conversational access, since AI answers respect exactly what you configured, including the mistakes.

    Layer 4: Labels and the Policy Ride-Along

    Purview sensitivity labels classify items and follow content through exports and downstream items; DLP and DSPM for AI policies act on them. Labels do not open or close doors by themselves - they make the estate legible to policy and to auditors, which is why the governance framework treats labelling the priority estates first as a quarter-one deliverable, not a someday.

    The Configuration Order That Works

    • Structure workspaces so each has one audience and one sensitivity story
    • Assign workspace roles to groups, sparingly; Admin is an on-call rota, not a courtesy
    • Share items outward instead of adding workspace members inward
    • Default-deny lakes; open them with OneLake data access roles per consumption boundary
    • Add RLS where consumers need filtered views, and align or remove the paths beneath it
    • Label the estates that would make headlines, then let policy enforce
    • Test with real accounts quarterly, and again before every AI enablement

    None of it is exotic. All of it is the difference between a security model you assert and one you can demonstrate.

    Sources and Further Reading

    Frequently asked

    Broadly five: workspace roles (Admin, Member, Contributor, Viewer) governing everything in a workspace; item permissions for sharing individual items; OneLake data access roles for folder and table level control in lakehouses; engine-level controls such as row-level and object-level security in warehouses and semantic models; and Purview sensitivity labels riding on top.

    Admins manage the workspace including access; Members add others and publish; Contributors create and edit content; Viewers see content without editing. Workspace roles are coarse: everyone with a role sees broadly everything there, which is why production estates use more workspaces rather than more exceptions.

    OneLake data access roles: define a role scoped to specific folders or tables and grant it to users or groups. Combined with sharing the item without workspace membership, this is the mechanism for fine-grained lake access.

    No, and this is the classic gap: RLS filters queries through the model. A user with direct lakehouse or SQL endpoint access bypasses it entirely. Data-level restrictions must be enforced at the layer users actually touch.

    Apply them to classify and protect flows: labels travel with exports and downstream items and drive Purview policy. They complement, not replace, access control - a label tells you data is Confidential; permissions decide who opens it.