Dr. Estera Kot

FabCon Europe 2026 in 18 demos · Part 13 of 18 · Security and governance

OneLake security: define RLS and CLS once, enforce them everywhere

Roles, row rules, and hidden columns live with the data in OneLake, and every Fabric engine reads the same rules, shortcuts included.

By Dr. Estera Kot, Microsoft MVP, CTO at Clouds on Mars, and former Microsoft Principal Product Manager for the Apache Spark runtime in Fabric. Published .

OneLake security is the data-plane permission model of Microsoft Fabric. You define roles on a lakehouse, scope them to tables, folders, rows, and columns, and OneLake enforces them in every Fabric engine that reads the data. Workspace roles decide what someone can do to an item. OneLake security decides which data they see. One role definition replaces separate rules in Spark, the SQL analytics endpoint, and Power BI. This post is part of FabCon Europe 2026 in 18 demos.

The catch sits in the defaults. Every lakehouse starts with a role called DefaultReader, and roles bind only Viewers and users with item permissions. Admins, Members, and Contributors read everything, whatever the roles say.

In short

  1. OneLake security roles grant Read or ReadWrite on tables and folders, with row-level and column-level rules. Fabric engines enforce them at query time, also through shortcuts.
  2. Roles restrict only Viewers and users with item permissions. Workspace Admins, Members, and Contributors keep full read and write access.
  3. Every lakehouse starts with DefaultReader, which gives all ReadAll users the whole lakehouse. Take users out of it before a restricted role can restrict them.
The OneLake security pane on the demo lakehouse lh_oud_rd: one role, DefaultReader, with type Grant, permission Read, and one member. 14 seconds, no sound, recorded Oct 19, 2026.

Same demo in Polish and German. Step-by-step runbook: D10.

What OneLake security is and how roles, RLS, and CLS work

OneLake enforces permissions on two planes. Workspace roles and item permissions form the control plane, which governs what you can do to an item. OneLake security is the data plane, which governs which data you can read or write.

A role has four parts: a permission (Read or ReadWrite), a type (always Grant, there are no Deny roles), the data (tables, folders, or schemas, with optional row and column rules), and members (Microsoft Entra users, groups, or nonuser identities). Access is deny by default. Workspace Admins and Members create the roles.

How OneLake combines roles and shortcuts

Inside one role, OneLake intersects the tables, the row rule, and the column rule. Across roles, it takes the union, so two row rules on the same table combine with OR. Through a shortcut, OneLake resolves the shortcut roles and the target roles separately and intersects them. A shortcut cannot widen what the target allows.

Where OneLake security filters a query that runs through a shortcut A Viewer in workspace B queries the table formulas through a shortcut. The Fabric engine asks OneLake for the caller's effective access. OneLake intersects the roles at the shortcut with the roles at the target table in lh_oud_rd and returns the allowed tables, rows, and columns. The engine filters the data and returns only allowed rows and columns. An external engine that is not authorized is blocked when row or column rules limit the caller. Caller a Viewer in workspace B Gets only the allowed rows and columns query Fabric engine Spark notebook SQL analytics endpoint Direct Lake on OneLake eventhouse and others Filters rows and columns effective access? allowed tables, rows, columns OneLake Shortcut formulas workspace B, shortcut roles Table formulas in lh_oud_rd workspace A, target roles Effective access = shortcut roles ∩ target roles Each role: tables ∩ rows ∩ columns Several roles: union External engine, not authorized × Blocked when RLS or CLS limits the caller Where OneLake security filters a query that runs through a shortcut The caller queries through a Fabric engine. The engine asks OneLake for the caller's effective access, which is the intersection of shortcut roles and target roles. The engine filters rows and columns. An external engine that is not authorized is blocked. Caller: a Viewer in workspace B queries the table formulas query Fabric engine Spark notebook, SQL analytics endpoint, Direct Lake on OneLake, eventhouse, and others Filters rows and columns asks for and receives the caller's effective access OneLake Shortcut formulas workspace B, shortcut roles Table formulas in lh_oud_rd workspace A, target roles Effective access = shortcut roles ∩ target roles Each role: tables ∩ rows ∩ columns Several roles: union The engine returns only the allowed rows and columns to the caller. External engine, not authorized Blocked when RLS or CLS limits the caller
Figure 1. OneLake keeps the rules, the engine applies them. Through a shortcut, access is the intersection of both role sets. An engine that cannot apply row or column rules gets nothing from a secured table.

Enforcement happens in the engine. Learn lists six Fabric engines that filter with RLS and CLS, all GA: Graph in Fabric, Lakehouse, Direct Lake on OneLake semantic models, Spark notebooks, the SQL analytics endpoint in user's identity access mode, and eventhouse. The OneLake Table Read API applies the same rules over REST, in preview.

An external engine that is not registered as an authorized engine counts as direct user access. If the user may not see every row and column, OneLake blocks the query. Keep that in mind when other tools read your tables through the Unity Catalog and Iceberg REST endpoints.

What the OneLake security demo shows

The clip stays on one screen: the starting state of every new lakehouse.

No custom role exists, and that is the point. A new lakehouse already grants Read on everything to every user with the ReadAll permission. The Explorer also shows tables directly under Tables, with no schema folder, so lh_oud_rd is a lakehouse without schemas.

The OneLake security pane of the lakehouse lh_oud_rd, Roles tab, listing one role named DefaultReader with type Grant, permission Read, and 1 member
The Roles tab at 0:00. DefaultReader is the only role, and it grants Read.

OneLake security limits and catches

The catch: roles only add access. DefaultReader grants Read on the whole lakehouse to every user with ReadAll. Put such a user in a role that shows one table, and the union still gives them everything. Learn's fix: remove those users from DefaultReader, or edit or delete DefaultReader, before a restricted role restricts anyone.

WhoEdits rolesReads data without a roleFiltered by RLS and CLS
Workspace AdminYesYes, all dataNo
Workspace MemberYesYes, all dataNo
Workspace ContributorNoYes, all dataNo
OneLake security roles bind below this line
Workspace ViewerNoNoYes
Read permission on the itemNoNoYes
ReadAll permission on the itemNoYes, all of it, through DefaultReaderYes, once DefaultReader no longer covers them
Figure 2. Who sees what. Admins, Members, and Contributors read everything through their Write permission. ReadAll users read everything through DefaultReader until you change it. Based on the role and permission tables in Microsoft Learn.

Roles decide who reads a table. Outbound access protection decides where data can go once someone has read it.

Run the OneLake security demo yourself

You need the lakehouse lh_oud_rd from the up script in the recap demos folder and the Admin or Member workspace role. Steps from runbook D10:

1. Open lh_oud_rd and select Manage OneLake security.
2. Open the DefaultReader role. It grants Read to everyone with the ReadAll permission.
3. Check Members. Before you add a restricted role, remove its users from DefaultReader, or they keep full access.

Expected result: the role list with DefaultReader, its Read permission, and its virtual members. Time and cost: about 3 minutes, on the F8 capacity from up.

To watch a row rule work, add your own role. This example is not in the recording.

Role:        GulfLineReaders, permission Read
Data:        table formulas
Row rule:    SELECT * FROM formulas WHERE line = 'gulf'
Members:     a test account that has Read on the lakehouse, not ReadAll

Query formulas as that account. Then give the same account ReadAll and query again. DefaultReader now covers it, and the union returns every row.

What to do on Monday

On Monday: Turn on OneLake security on one lakehouse and check that shortcuts respect it.

Pick a lakehouse that another workspace already reads through a shortcut, and run the check as a Viewer on the shortcut side.

Key facts at a glance

Checked on Microsoft Learn on November 3, 2026.

IDFactSource
K1RLS and CLS filtering: GA in six Fabric engines, public preview for authorized third-party engines and the Table Read API.Learn: Read data secured with OneLake security
K2Roles are Grant only, with no Deny. Access is deny by default.Learn: How OneLake security controls data access
K3Lakehouses support Read and ReadWrite. Mirrored items support Read.Learn: Create and manage OneLake security roles
K4Roles restrict Viewers and Read users. Admins, Members, and Contributors are not affected.Learn: Data security in OneLake
K5Every lakehouse has DefaultReader, which grants Read to all ReadAll users.Learn: How OneLake security controls data access
K6250 roles per item, up to 1,000 on request. 500 members and 500 permissions per role.Learn: How OneLake security controls data access
K7Role edits apply in about 5 minutes, group membership changes in about an hour.Learn: How OneLake security controls data access
K8An RLS rule holds at most 1,000 characters. Spark needs Fabric runtime 1.3.Learn: RLS syntax and access control model

Frequently asked questions

Is OneLake security generally available?

As of November 3, 2026, Microsoft Learn labels row-level and column-level security filtering GA in six Fabric engines, including Spark notebooks, Lakehouse, Direct Lake on OneLake, and the SQL analytics endpoint in user's identity mode. Authorized third-party engines and the OneLake Table Read API are in public preview. Learn gives no single GA date.

What is the DefaultReader role in OneLake security?

DefaultReader is a role that Fabric creates in every lakehouse. It grants Read on all data in the lakehouse to every user with the ReadAll permission, through virtual members. If you delete it, those users lose data access unless another role grants it.

Does OneLake security restrict workspace Admins and Contributors?

No. OneLake security roles restrict users with the Viewer workspace role or Read permission on the item. Workspace Admins, Members, and Contributors read and write all data in the workspace, whatever the roles say. Test row and column rules with a Viewer account.

Does OneLake security work through shortcuts?

Yes. For a OneLake-to-OneLake shortcut, OneLake resolves the roles at the shortcut and at the target separately and grants only their intersection. Passthrough shortcuts use the caller's identity. Delegated shortcuts combine the caller's access on the shortcut path with the connection identity's access on the target.

Can I combine row-level and column-level security in OneLake?

Yes, but only inside one role. OneLake does not support a user who belongs to one role with a row rule on a table and another role with a different set of columns on the same table, and such queries return errors. Roles with ReadWrite permission cannot carry RLS or CLS.

How long do OneLake security role changes take to apply?

Changes to a role definition take about 5 minutes. Changes to the membership of a group in a role take about an hour, and some Fabric engines cache access for up to another hour.

About the author

Dr. Estera Kot is CTO at Clouds on Mars, a Microsoft and Databricks partner for data and AI in Europe and the Middle East. At Microsoft she was Principal Product Manager for the Apache Spark runtime in Azure Synapse Analytics and Microsoft Fabric, and she created the Native Execution Engine. She is a Microsoft MVP and holds a Ph.D. in Computer Science from the Warsaw University of Technology. She presented this series as the FabCon Europe 2026 recap in Gdynia on October 21, 2026, and online on October 23, 2026. Slides, recordings, and runbooks are in the public recap repository.

Sources

Microsoft Learn and the recap repository, checked on November 3, 2026.