本文档提供了 OneLake 安全访问控制模型工作原理的详细指南。 它包含有关如何构建角色、如何应用于数据以及与 Microsoft Fabric 中的其他结构集成的详细信息。
OneLake 安全角色
OneLake 安全使用基于角色的访问控制 (RBAC) 模型来管理对 OneLake 中的数据的访问。 每个角色由多个关键组件组成。
- 类型: 角色是授予访问权限(GRANT)还是删除访问权限(DENY)。 仅支持 GRANT 类型角色。
- 许可: 正在授予或拒绝的特定作或作。
- 范围: 具有权限的 OneLake 对象。 对象是表、文件夹或架构。
- 成员: 分配给角色的任何Microsoft Entra 标识,例如用户、组或非用户标识。 该角色授予Microsoft Entra 组的所有成员。
通过将成员分配到某个角色,然后该用户将受该角色范围的相关权限的约束。 由于 OneLake 安全使用默认拒绝模型,因此除非 OneLake 安全角色显式授予,否则所有用户都无需访问数据。
权限和支持的项目
OneLake 安全角色支持以下权限:
- 读: 允许用户从表读取数据并查看关联的表和列元数据。 在 SQL 术语中,此权限等效于VIEW_DEFINITION和 SELECT。 有关详细信息,请参阅 元数据安全性。
OneLake 安全性使用户能够仅定义以下 Fabric 项的数据访问角色。
| 织物物品 | 状态 | 支持的权限 |
|---|---|---|
| Lakehouse | 公共预览版 | Read、ReadWrite |
| Azure Databricks 镜像目录 | 公共预览版 | 读取 |
OneLake 安全性和工作区权限
工作区权限是保护 OneLake 中数据的第一道安全边界。 每个工作区表示一个域或项目区域,团队可在其中协作处理数据。 通过 Fabric 工作区角色管理工作区中的安全性。 详细了解 fabric 基于角色的访问控制 (RBAC):工作区角色
Fabric 工作区角色授予应用于工作区中所有项的权限。 下表概述了工作区角色允许的基本权限。
| 权限 | 管理员 | 成员 | 参与者 | 查看者 |
|---|---|---|---|---|
| 在 OneLake 中查看文件 | 始终*是 | 始终*是 | 始终*是 | 默认为否。 使用 OneLake 安全授予访问权限。 |
| 在 OneLake 中写入文件 | 始终*是 | 始终*是 | 始终*是 | 否 |
| 可以编辑 OneLake 安全角色 | 始终*是 | 始终*是 | 否 | 否 |
*由于工作区管理员、成员和参与者角色自动授予对 OneLake 的写入权限,因此这些角色替代任何 OneLake 安全性读取权限。
工作区角色管理控制平面数据访问,这意味着与创建和管理 Fabric 项目和权限进行交互。 此外,工作区角色还使用 OneLake 安全默认角色为数据项提供默认访问级别。 (请注意,默认角色仅适用于查看者,因为管理员、成员和参与者已通过写入权限提升访问权限)默认角色是一个普通的 OneLake 安全角色,该角色是随每个新项自动创建的。 它为具有特定工作区或项权限的用户提供对该项目中数据的默认访问级别。 例如,Lakehouse 项具有 DefaultReader 角色,允许用户具有 ReadAll 权限的用户查看 Lakehouse 中的数据。 这可确保访问新创建的项的用户具有基本级别的访问权限。 所有默认角色都使用成员虚拟化功能,以便该角色的成员是具有所需权限的工作区中的任何用户。 例如,对 Lakehouse 具有 ReadAll 权限的所有用户。 下表显示了标准默认角色是什么。 项可能具有仅适用于该项类型的专用默认角色。
| 织物物品 | 角色名称 | 权限 | 包含的文件夹 | 分配的成员 |
|---|---|---|---|---|
| Lakehouse | DefaultReader |
读取 |
Tables/ 和 Files/ 下的所有文件夹 |
所有具有 ReadAll 权限的用户 |
| Lakehouse | DefaultReadWriter |
读取 | 所有文件夹 | 所有具有写入权限的用户 |
注意
若要限制访问特定用户或特定文件夹,要么修改默认角色,要么将其移除再创建新的自定义角色。
OneLake 安全和项权限
在工作区中,可以为 Fabric 对象配置权限,这些权限独立于工作区角色。 您可以通过共享某项或管理某项的权限来配置权限。 以下权限决定了用户能否对 OneLake 中的数据执行操作。 有关项目共享的详细信息,请参阅 Lakehouse 共享的工作原理
| 权限 | 能否在 OneLake 中查看文件? | 能否在 OneLake 中写入文件? | 是否可以通过 SQL 分析终结点读取数据? |
|---|---|---|---|
| 读取 | 默认为否。 使用 OneLake 的安全设置来授予访问权限。 | 否 | 否 |
| 读取全部 | 通过 DefaultReader 角色是的。 使用 OneLake 安全限制访问权限。 | 否 | 不* |
| 写入 | 是 | 是 | 是 |
| 执行、重新共享、ViewOutput、ViewLogs | N/A - 不能自行授予 | N/A - 不能自行授予 | N/A - 不能自行授予 |
*取决于 SQL 分析终结点模式。
创建角色
可通过湖屋数据访问设置来定义和管理 OneLake 安全角色。
如需了解更多信息,请参阅数据访问角色入门。
引擎和用户访问数据
对 OneLake 的数据访问采用以下两种方式之一:
- 通过 Fabric 查询引擎或
- 通过用户访问(来自非 Fabric 引擎的查询被视为用户访问)
OneLake 安全性可确保数据始终保持安全。 由于存储级别作不支持某些 OneLake 安全功能(如行级和列级安全性),因此不允许所有类型的对行级或列级安全数据的访问权限。 这可以保证用户看不到他们不允许的行或列。 Microsoft Fabric 引擎已启用,以便对数据查询应用行级和列级安全筛选。 这意味着,当用户在 Lakehouse 或其他项中查询具有 OneLake 安全 RLS 或 CLS 的数据时,用户看到的结果将删除隐藏的行和列。 对于 OneLake 中具有 RLS 或 CLS 的用户访问权限,如果不允许请求访问的用户查看该表中的所有行或列,则会阻止查询。
下表概述了哪些Microsoft Fabric 引擎支持 RLS 和 CLS 筛选。
| 发动机 | RLS/CLS 筛选 | 地位 |
|---|---|---|
| Lakehouse | 是 | 公共预览 |
| Spark Notebooks | 是 | 公共预览 |
| “用户标识模式”中的 SQL Analytics 终结点 | 是 | 公共预览 |
| 在 OneLake 模式下使用 DirectLake 的语义模型 | 是 | 公共预览 |
| Eventhouse | 否 | 已计划的 |
| 数据仓库外部表 | 否 | 已计划的 |
OneLake 安全访问控制模型详细信息
本部分详细介绍了 OneLake 安全角色如何授予对特定范围的访问权限、访问作方式以及如何跨多个角色和访问类型解析访问权限。
表级别安全性
所有 OneLake 表都由湖中的文件夹表示,但湖中的所有文件夹都是从 Fabric 中的 OneLake 安全性和查询引擎的角度来表示的。 若要被视为有效表,必须满足以下条件:
- 项目的 Tables/ 目录中存在一个文件夹。
- 该文件夹包含一个_delta_log文件夹,其中包含表元数据的相应 JSON 文件。
- 该文件夹不包含任何子快捷方式。
如果在表上配置了表级安全性,那么不符合那些条件的任何表都将被拒绝访问。
元数据安全性
OneLake 安全性对数据的读取访问权限授予对表中数据和元数据的完全访问权限。 对于无权访问表的用户,数据永远不会公开,通常元数据不可见。 这也适用于列级别安全性以及用户查看或看不到该表中的列的能力。 但是,OneLake 安全性不保证无法访问表的 元数据 ,特别是在以下情况下:
- SQL 终结点查询:SQL Analytics 终结点使用与 SQL Server 相同的元数据安全行为。 这意味着,如果用户无权访问表或列,该查询的错误消息将显式声明该用户无权访问的表或列名称。
- 语义模型:向用户授予对语义模型生成权限后,无论用户是否有权访问它们,都可以访问模型中包括的表名。 此外,包含隐藏列的报表视觉对象在错误消息中显示列名。
权限继承
对于任何给定的文件夹,OneLake 安全权限始终继承到该文件夹中的文件和子文件夹的整个层次结构。
例如,请思考 OneLake 中存在以下一种湖屋的层次结构:
Tables/
──── (empty folder)
Files/
────folder1
│ │ file11.txt
│ │
│ └───subfolder11
│ │ file1111.txt
| │
│ └───subfolder111
| │ file1111.txt
│
└───folder2
│ file21.txt
为该湖屋创建两个角色。
Role1 授予“folder1”的读取权限,Role2 授予“folder2”的读取权限。
对于给定的层次结构,OneLake 的安全权限 Role1 采用 Role2 以下方式进行继承:
Role1:读取 folder1
│ │ file11.txt │ │ │ └───subfolder11 │ │ file1111.txt | │ │ └───subfolder111 | │ file1111.txtRole2:读取 folder2
│ file21.txt
OneLake 安全性中的遍历和列表
OneLake 安全提供自动遍历父项,以确保用户轻松发现数据。 向用户授予 subfolder11 的读取权限会授予该用户列出和遍历父目录 folder1 的能力。 此功能类似于 Windows 文件夹权限,其中授予对子文件夹的访问权限,允许发现和遍历父目录。 授予父级的列表和遍历不扩展至直接父级以外的其他项,确保其他文件夹的安全。
例如,请思考 OneLake 中存在以下一种湖屋的层次结构。
Tables/
──── (empty folder)
Files/
────folder1
│ │ file11.txt
│ │
│ └───subfolder11
│ │ file111.txt
| │
│ └───subfolder111
| │ file1111.txt
│
└───folder2
│ file21.txt
对于给定的层次结构,“Role1”的 OneLake 安全权限提供以下访问权限。 对 file11.txt 的访问权限不可见,因为它不是 subfolder11 的父级。 对于 Role2 同理,file111.txt 也不可见。
Role1:读取 subfolder11
Files/ ────folder1 │ │ │ └───subfolder11 │ │ file111.txt | │ │ └───subfolder111 | │ file1111.txtRole2:读取 subfolder111
Files/ ────folder1 │ │ │ └───subfolder11 | │ │ └───subfolder111 | │ file1111.txt
对于快捷方式,列表行为略有不同。 外部数据源的快捷方式的行为与文件夹的行为相同,但其他 OneLake 位置的快捷方式具有特殊的行为。 快捷方式的目标权限确定对某个 OneLake 快捷方式的访问权限。 列出快捷方式时,不会调用以检查目标访问。 因此,列出目录时会返回所有内部快捷方式,不管用户对该目标的访问权限是什么。 当用户尝试打开该快捷方式时,访问检查会进行评估,而用户只能看到自己拥有所需权限才能看到的数据。 有关快捷方式的详细信息,请参阅快捷方式安全性部分。
请思考包含快捷方式的文件夹层次结构,如下所示。
Files/
────folder1
│
└───shortcut2
|
└───shortcut3
Role1:读取 folder1
Files/ ────folder1 │ └───shortcut2 | └───shortcut3Role2:未定义任何权限
Files/ │ └───shortcut2 | └───shortcut3
行级别安全性
OneLake 安全性允许用户通过编写 SQL 谓词来指定行级别安全性,以限制向用户显示的数据。 RLS 通过显示谓词的计算结果为 true 的行来运行。 有关详细信息,请参阅 行级别安全性。
行级别安全性将字符串数据评估为不区分大小写,使用以下排序规则进行排序和比较: Latin1_General_100_CI_AS_KS_WS_SC_UTF8
使用行级别安全性时,请确保 RLS 语句干净且易于理解。 使用整数列进行排序和大于或小于作。 如果不知道输入数据的格式,尤其是与 unicode 字符或重音敏感度相关的格式,请避免字符串等效。
列级别安全性
OneLake 安全性支持通过删除用户对列的访问权限(隐藏)来限制对列的访问。 隐藏列被视为没有为其分配任何权限,从而导致默认策略无访问权限。 隐藏列对用户不可见,对包含隐藏列的数据的查询不会返回该列的数据。 如 元数据安全性 中所述,在某些情况下,列的元数据在某些错误消息中可能仍可见。
列级别安全性还遵循 SQL 终结点中通过拒绝语义作更严格的行为。 对 SQL 终结点中的列进行拒绝可确保阻止对该列的所有访问,即使多个角色将组合在一起以授予对该列的访问权限。 因此,SQL 终结点中的 CLS 使用用户所属的所有角色之间的交集来运行,而不是针对所有其他权限类型建立联合行为。 有关角色合并方式的详细信息,请参阅“评估多个 OneLake 安全角色”部分。
快捷方式
快捷方式概述
OneLake 安全性与 OneLake 中的快捷方式集成,以确保可以轻松保护 OneLake 内外的数据。 快捷方式有两种主要身份验证模式:
- 直通快捷方式(SSO):根据快捷目标评估查询用户的凭据,以确定允许看到哪些数据。
- 委派快捷方式:快捷方式使用固定凭据访问目标,在检查委托凭据对源的访问权限之前,会根据 OneLake 安全性评估查询用户。
此外,在 OneLake 中创建任何快捷方式时,会评估 OneLake 安全权限。 阅读 快捷安全文档中的快捷方式权限。
传递快捷方式中的 OneLake 安全性
OneLake 文件夹上的安全设置始终会通过任何 内部快捷方式 传播,以限制对快捷方式源路径的访问。 当用户通过指向另一个 OneLake 位置的快捷方式访问数据时,将使用调用用户的标识来授权访问快捷方式的目标路径中的数据。 因此,此用户必须在目标位置具有 OneLake 安全权限才能读取数据。
重要
在委派标识模式下 使用 DirectLake over SQL 或 T-SQL 引擎通过 Power BI 语义模型访问快捷方式时,调用用户的标识不会传递到快捷方式目标。 而是改为传递调用项所有者的标识,从而将访问权限委托给调用用户。 若要解决此问题, 请在 DirectLake 中通过 OneLake 模式使用 Power BI 语义模型 ,或者在 用户的标识模式下使用 T-SQL。
不允许为内部快捷方式定义 OneLake 安全权限,必须在目标项中的目标文件夹上进行定义。 目标项必须是支持 OneLake 安全角色的项类型。 如果目标项不支持 OneLake 安全性,则会根据用户是否对目标项具有 Fabric ReadAll 权限来评估用户的访问权限。 用户不需要对某个项具有 Fabric 读取权限,才能通过快捷方式访问它。
委派快捷方式中的 OneLake 安全性
OneLake 支持为 ADLS、S3 和 Dataverse 等快捷方式定义权限。 这种情况下,在为此类型快捷方式启用的委派授权模型之外,还会应用权限。
假设 user1 在湖屋中创建指向 AWS S3 桶中某个文件夹的 S3 快捷方式。 然后,user2 尝试访问此快捷方式中的数据。
| S3 连接是否授权对委派 user1 的访问权限? | OneLake 安全性是否授权对请求 user2 的访问权限? | 结果:user2 是否可以访问 S3 快捷方式中的数据? |
|---|---|---|
| 是 | 是 | 是 |
| 否 | 否 | 否 |
| 否 | 是 | 否 |
| 是 | 否 | 否 |
可以为快捷方式的整个范围或所选子文件夹定义 OneLake 安全权限。 文件夹上设置的权限以递归方式继承到所有子文件夹,即使子文件夹位于快捷方式中。 外部快捷方式上的安全设置可以限定为授予对整个快捷方式或快捷方式内任何子路径的访问权限。 指向外部快捷方式的另一个内部快捷方式仍要求用户有权访问原始外部快捷方式。
与 OneLake 安全性中的其他类型的访问不同,访问外部快捷方式的用户需要对外部快捷方式所在的数据项具有 Fabric 读取权限。 这是安全解析与外部系统的连接所必需的。
请参阅 OneLake 快捷方式,了解有关 S3、ADLS 和 Dataverse 快捷方式的详细信息。
评估多个 OneLake 安全角色
用户可以是多个不同 OneLake 安全角色的成员,每个角色都提供对数据的访问权限。 这些角色组合在一起称为“有效角色”,是用户在访问 OneLake 中的数据时将看到的内容。 角色在 OneLake 安全性中使用 UNION 或限制最少的模型组合在一起。 这意味着,如果 Role1 授予对 TableA 的访问权限,而 Role2 将授予对 TableB 的访问权限,则用户将能够同时查看 TableA 和 TableB。
OneLake 安全角色还包含行级和列级安全性,用于限制对表行和列的访问。 每个 RLS 和 CLS 策略都存在于角色中,并限制对该单个角色中的所有用户的数据的访问。 例如,如果 Role1 授予对 Table1 的访问权限,但在 Table1 上具有 RLS,并且仅显示 Table1 的某些列,则 Role1 的有效角色将是 Table1 的 RLS 和 CLS 子集。 这可以表示为(R1ols n R1cls n R1rls),其中 n 是角色中每个组件的交集。
处理多个角色时,RLS 和 CLS 会结合相应表上的 UNION 语义。 CLS 是每个角色中可见的表的直接联合集。 使用 OR 运算符跨谓词组合 RLS。 例如,WHERE city = 'Redmond' OR city = 'New York'。
若要评估每个角色(每个角色都有 RLS 或 CLS),请先根据角色本身提供的访问权限来解析每个角色。 这意味着评估所有对象、行和列级别安全性的交集。 然后,将每个评估的角色与用户作为 UNION作成员的所有其他角色组合在一起。 输出是该用户的有效角色。 这可以表示为:
( (R1ols n R1cls n R1rls) u (R2ols n R2cls n R2rls) )
最后,Lakehouse 中的每个快捷方式都会生成一组推断的角色,这些角色用于将快捷方式目标的权限传播到所查询的项。 推断的角色以与非推断角色类似的方式运行,只是先在快捷目标上解析这些角色,然后再与快捷 Lakehouse 中的角色组合在一起。 这可确保快捷方式 Lakehouse 上的任何权限继承都断开,并正确评估推断的角色。 然后,完整的组合逻辑可以表示为:
( (R1ols n R1cls n R1rls) u (R2ols n R2cls n R2rls) ) n ( (R1'ols n R1'cls n R1'rls) u (R2'ols n R2'cls n R2'rls)) )
其中 R1 和 R2 是推断的角色,R1 和 R2 是快捷湖屋角色。
重要
如果两个角色合并,使列和行在不同查询中不一致,则会阻止访问,确保不向最终用户泄露任何数据。
OneLake 安全限制
如果将 OneLake 安全性角色分配给 B2B 来宾用户,则必须 Microsoft Entra 外部 ID 中为 B2B 配置外部协作设置。 “来宾用户访问权限”设置必须设置为“来宾用户的访问权限与成员相同(最具包容性)”。
OneLake 安全不支持跨区域快捷方式。 任何使用快捷方式访问不同容量区域的数据的尝试都会导致出现 404 错误。
如果向 OneLake 安全性中的角色添加通讯组列表,则 SQL 终结点无法将列表中的成员解析为强制实施访问权限。 结果是当访问该 SQL 终结点时,用户显示为不是该角色的成员。 SQL 语义模型中的 DirectLake 也受此限制的约束。
若要使用 Spark SQL 从 Spark 笔记本查询数据,用户必须在他们正在查询的工作区中至少具有查看器访问权限。
Spark 笔记本要求环境为 3.5 或更高版本,并使用 Fabric 运行时 1.3。
OneLake 安全性不适用于 专用链接保护。
外部数据共享预览功能与数据访问角色预览不兼容。 在 Lakehouse 上启用数据访问角色预览时,任何现有的外部数据共享都可能会停止工作。
如果对该项启用了 OneLake 安全性,Azure Mirrored Databricks 目录不支持管理目录功能。 此功能将在 2025 年 11 月推出。
下表提供了 OneLake 数据访问角色的限制。
方案 限制 每个 Fabric 项的 OneLake 安全性角色数量上限 每个湖屋 250 个角色 每个 OneLake 安全角色的成员人数上限 每个角色,500 个用户或用户组 每个 OneLake 安全角色的权限数量上限 每个角色 500 个权限
OneLake 安全性中的延迟
- 对角色定义的更改需要大约 5 分钟才能应用。
- 在对 OneLake 安全角色中的用户组进行更改后,OneLake 大约在一个小时后才能在更新的用户组上应用该角色的权限。
- 某些 Fabric 引擎有自己的缓存层,因此可能需要额外的一小时才能更新所有系统中的访问。