借助 OneLake 安全性,Microsoft Fabric 正在扩展组织管理和强制执行跨工作负荷的数据访问的方法。 此安全框架使管理员能够更灵活地配置权限。 管理员可以选择通过 OneLake 实现集中式治理,或在 SQL 分析终结点中进行基于 SQL 的精细控制。
SQL 分析端点中的访问模式
使用 SQL 分析终结点时,所选access模式确定如何强制执行数据安全性。 Fabric 支持两种独特的访问模式,每种模式根据您的运营和合规性需求提供不同的优势。
用户标识模式:使用 OneLake 角色和策略强制实施安全性。 在此模式下,SQL 分析终结点将已登录用户的标识传递给 OneLake,读取 访问权限完全由 OneLake 中定义的安全规则控制。 支持对非数据对象(视图、存储过程、函数)的 SQL 级权限,确保跨Power BI、笔记本和 lakehouse 等工具进行一致的治理。
委派标识模式:通过 SQL 提供完全控制。 在此模式下,SQL 分析终结点使用 工作区或项 所有者的标识连接到 OneLake, 并且安全性由数据库中定义的 SQL 权限独占管理 。 此模型支持传统安全方法,包括 GRANT、REVOKE、自定义角色、Row-Level 安全和动态数据掩码。
每个模式都支持不同的治理模型。 了解其含义对于在 Fabric 环境中选择正确的方法至关重要。
重要
使用 SQL 分析终结点需要对工件的访问权限。 若要通过 SQL 分析终结点连接到和查询数据,用户必须对与终结点关联的项目具有读取权限。 如果用户对项目没有控制平面访问权限(例如工作区角色访问或显式项权限),则会拒绝与 SQL 分析终结点的连接,而不管该用户可能存在的任何 SQL 权限。
访问模式之间的比较
下表比较了用户标识模式与委托标识模式中如何设置安全性以及在何处设置安全性,并按对象类型和数据访问策略划分。
| 安全目标 | 用户标识模式 | 委派标识模式 |
|---|---|---|
| Tables | 访问由 OneLake 安全角色控制。 不允许使用 SQL GRANT/REVOKE 。 |
使用 SQL GRANT/REVOKE完全控制 。 |
| 视图 | 使用 SQL GRANT/REVOKE 分配权限。 |
使用 SQL GRANT/REVOKE 分配权限。 |
| 存储过程 | 使用 SQL GRANT EXECUTE 分配权限。 |
使用 SQL GRANT EXECUTE 分配权限。 |
| 函数 | 使用 SQL GRANT EXECUTE 分配权限。 |
使用 SQL GRANT EXECUTE 分配权限。 |
| 行级安全性 (RLS) | 在 OneLake UI 中定义为 OneLake 安全角色的一部分。 | 使用 SQL CREATE SECURITY POLICY定义 。 |
| 列级安全性(CLS) | 在 OneLake UI 中定义为 OneLake 安全角色的一部分。 | 使用 SQL GRANT SELECT 和列列表定义。 |
| 动态数据掩码 (DDM) | OneLake 安全性不支持。 | 使用 SQL ALTER TABLE 和 MASKED 选项定义。 |
OneLake 安全性中的用户标识模式
在用户标识模式下,SQL 分析终结点使用直通身份验证机制强制实施数据访问。 当用户连接到 SQL 分析终结点时,其 Entra ID 标识将传递到 OneLake,后者执行权限检查。 使用 OneLake Lakehouse 中定义的安全规则(而不是任何 SQL 级别 GRANT 或 REVOKE 语句)评估针对表的所有读取操作。
通过此模式可以集中管理安全性,确保跨所有 Fabric 体验(包括 Power BI、Notebook、Lakehouse 和 SQL 分析终结点)的一致强制实施。 它专为治理框架而设计,其中访问权限应在 OneLake 中定义一次,并在各处自动生效。
在用户标识模式下:
表访问完全受 OneLake 安全性的管控。 忽略表上的 SQL
GRANT/REVOKE语句。RLS(行级安全性)、CLS(列级安全性)和 OLS(对象级安全性)均在 OneLake 体验中定义。
允许对非数据对象(如视图、存储过程和函数)使用 SQL 权限,从而灵活地定义自定义逻辑或面向用户的入口点来访问数据。
SQL 分析端点不支持写操作。 所有写入都必须通过 Fabric 门户中的 Lakehouse 页面进行,并由工作区角色(管理员、成员、参与者)管理。
重要
跨生产者和消费者(中心辐射型)的一对一身份映射。 当 OneLake 安全策略从生成者(定义角色的源项)传递到使用者(通过快捷方式访问数据的目标项)时,在使用者中必须将分配给 OneLake 安全角色的标识 精确地 1:1 映射。 必须将相同的主体(无论是用户还是组)授予Fabric使用者项目的读取权限,就像生成者的安全角色中引用的主体一样。 嵌套或有效的组成员身份 无法 跨此边界解析。
例如,如果 OneLake 的生成者安全角色引用user123@microsoft.com,则user123@microsoft.com(该确切对象 ID)也必须在使用者的 lakehouse 上具有 Fabric “读取”权限。 同样,如果生成者角色引用Group A,则必须向Group A本身授予在使用者上的Fabric读取权限,仅向组A的成员授予该权限不足以满足匹配。
有关具有 用户标识模式的权限模型的详细信息,请参阅 OneLake 安全性 的数据访问控制模型 。
OneLake 和 SQL 分析终结点之间的安全同步
用户标识模式的关键组件是 安全同步服务。 此后台服务监视对 OneLake 中安全角色所做的更改,并确保这些更改反映在 SQL 分析终结点中。
安全同步服务负责以下各项:
检测对 OneLake 角色的更改,包括新角色、更新、用户分配以及与表相关的更改。
将 OneLake 定义的策略(RLS、CLS、OLS)转换为等效的与 SQL 兼容的数据库角色结构。
确保正确验证来自其他 lakehouses 的 快捷方式对象 (来自其他 lakehouses 的表),以便遵守原始 OneLake 安全设置,即使在远程访问时也是如此。
此同步可确保 OneLake 安全定义具有权威性,无需手动 SQL 级干预来复制安全行为。 因为安全是集中实施的:
在此模式下,不能直接使用 T-SQL 定义 RLS、CLS 或 OLS。
你仍然可以使用
GRANT或EXECUTE语句将 SQL 权限应用于视图、函数和存储过程。
安全同步重试退避
安全同步包括用于保护系统稳定性并避免不必要的计算消耗的重试退避机制:
如果将 OneLake 安全角色应用到 SQL 分析终结点时出现重复错误,系统可能会暂时暂停自动同步尝试。
修改现有 OneLake 安全角色或创建新角色时,同步会自动恢复。
安全同步错误和解决方法
| Scenario | 用户标识模式下的行为 | 委托模式下的行为 | 纠正措施 | 注释 |
|---|---|---|---|---|
| RLS 策略引用已删除或重命名的列 | 错误: 行级别安全策略引用不再存在的列。 在修复策略之前,数据库进入错误状态。 | 错误:无效的列名 <列名> | 更新或删除一个或多个受影响的角色,或还原缺少的列。 | 必须在角色创建时所在的 Lakehouse 中进行更新。 |
| CLS 策略引用已删除或重命名的列 | 错误: 列级安全策略引用不再存在的列。 在修复策略之前,数据库进入错误状态。 | 错误:无效的列名 <列名> | 更新或删除一个或多个受影响的角色,或还原缺少的列。 | 必须在创建角色的 Lakehouse 中进行更新。 |
| RLS/CLS 策略引用已删除或重命名的表 | 错误: 安全策略引用不再存在的表。 | 未显示任何错误;如果缺少表,则查询会以无提示方式失败。 | 更新或删除一个或多个受影响的角色,或还原缺少的表。 | 必须在创建角色的 Lakehouse 中进行更新。 |
| DDM (动态数据掩码) 策略引用已删除或重命名的列 | OneLake 安全性不支持 DDM;必须通过 SQL 实现。 | 错误:无效的列名 <列名> | 更新或删除一个或多个受影响的 DDM 规则,或还原缺少的列。 | 更新 SQL 分析终结点中的 DDM 策略。 |
| 系统错误(意外失败) | 错误: 发生意外的系统错误。重试或联系支持人员。 | 错误: 将表更改应用于 SQL 时发生内部错误。 | 重试操作;如果问题仍然存在,请联系Microsoft 支持部门。 | N/A |
| 用户对项目没有权限 | 错误: 用户对项目没有权限 | 错误: 用户对项目没有权限 | 向用户提供objectID {objectID}工件的权限。 |
对象 ID 必须在 OneLake 安全角色成员和 Fabric 项目权限之间完全匹配。 如果一个组被添加到角色成员中,则必须为该组授予Fabric读取权限。 将该组中的成员添加到项目并不算作直接匹配项。 |
| 不支持用户主体 | 错误: 不支持用户主体。 | 错误: 不支持用户主体。 | 从角色{username}中删除用户DefaultReader。 |
如果用户不再是有效的Entra ID(例如,用户离开组织或删除),则会发生此错误。 从角色中删除它们以解决错误。 |
具有安全同步的快捷方式行为
OneLake 安全性在数据源处强制执行,因此安全同步会禁用涉及快捷方式的表和视图的所有权链式访问。 这可确保始终评估并遵循源系统权限,即使对于来自另一个数据库的查询也是如此。
因此:
用户必须在快捷方式的源(当前的Lakehouse或SQL 分析终结点)和数据物理驻留的目标位置上都具有有效的访问权限。
如果用户在任一端都缺少权限, 则查询失败 并出现访问错误。
设计引用快捷方式的应用程序或视图时,请确保在快捷方式关系的 两端 正确配置角色分配。
此设计可在 Lakehouse 边界内保持安全完整性,但如果跨 Lakehouse 的角色不一致,可能会引发访问故障的情况。
OneLake 安全性中的委托模式
在 委派标识模式下,SQL 分析终结点保留与传统 SQL 安全模型的 向后兼容性 。 安全性在 SQL 引擎层定义和强制实施, OneLake 安全角色和访问策略不会传递到 表级访问。 必须使用 SQL 构造(、安全策略等)定义所有筛选和访问控制(包括对架构和表的访问、Row-Level 安全性(RLS)、Column-Level 安全性(CLS)和动态数据掩码(GRANT/REVOKEDDM)。
由于最终用户的 OneLake 安全角色不会直接强制执行,因此在 OneLake 中定义的任何安全规则(例如,通过 OneLake 读取的 Spark 或其他引擎强制实施的规则)在通过 SQL 分析终结点查询相同的数据时 不适用 。 当工作负荷依赖于 SQL 本机安全语义或现有 T-SQL 工具需要完全兼容性时,请选择此模式。
当用户连接到 SQL 分析终结点并发出查询时:
SQL 根据 SQL 层中定义的权限验证查询。
如果查询获得授权,系统会继续access存储在 OneLake 中的数据。
此数据访问是使用 Lakehouse 或 SQL 分析终结点所有者(也称为 项帐户)的标识(而不是已登录的用户)执行的。
因此 项目所有者 负责在 OneLake 中拥有足够的权限,以工作负荷的名义读取基础文件。 向最终用户授予的 SQL 权限与项所有者的 OneLake 访问之间的任何不对齐都会导致查询失败。
此模式支持 DBA 或应用程序使用的现有 T-SQL 工具和做法,在所有对象级别和 SQL 定义的 RLS、CLS 和 DDM 上完全兼容 SQL GRANT/REVOKE 。
代理模式下的快捷方式行为
由于委托模式使用 项所有者的标识连接到 OneLake,因此仅当所有者 对整个源表具有不受限制的访问权限时,快捷方式才有效。 如果源表应用了任何 OneLake 级别安全规则(例如 Row-Level 安全(RLS)、Column-Level 安全(CLS),SQL 分析终结点 将阻止访问该快捷方式。
因此:
指向 没有数据级安全规则 的源表的快捷方式在委托模式下正常工作。
即使最终用户对快捷对象具有 SQL 权限,在委托模式下,SQL 分析终结点依然无法访问指向 OneLake 安全性中带有 RLS 或 CLS 的源表的快捷方式。
若要使用源具有 OneLake 安全策略的快捷方式,请在使用者终结点使用 用户标识模式 ,以便根据源的 OneLake 安全规则评估最终用户的标识。
如何更改 OneLake 访问模式
访问模式确定通过 SQL 分析终结点查询 OneLake 时如何对数据访问进行身份验证和强制执行。 可以使用以下步骤在用户标识模式和委派标识模式之间切换:
导航到 Fabric 工作区并打开 Lakehouse。 从右上角从 lakehouse 切换到 SQL 分析终结点。
在顶部导航中,转到“ 安全 ”选项卡,然后选择以下 OneLake 访问模式之一:
用户标识 - 使用登录用户的标识。 执行 OneLake 角色。
委托身份 - 使用项目所有者的身份。 仅强制实施 SQL 权限。
此时会启动一个弹出窗口以确认你的选择。 选择 “是 ”以确认更改。
重要
更改安全模式会暂时使 SQL 分析终结点在整个工作区中不可用。 此操作会取消该工作区中所有 SQL 分析终结点的所有正在运行的查询和排队查询。 仅在需要时更改模式,最好在非工作时间避免停机。
在模式之间切换时的注意事项
重要
在用户标识和委托模式之间切换(无论哪个方向)时,会自动删除内嵌元数据对象,包括表值函数(TVF)和标量函数。 此行为仅影响元数据定义;OneLake 中的基础数据不受影响。
切换到用户标识模式
将忽略 SQL RLS、CLS 和表级权限。
必须为用户配置 OneLake 角色以维持访问权限。
只有具有查看器权限或共享只读访问权限的用户受 OneLake 安全性的约束。
现有 SQL 角色被删除,无法恢复。
切换到委派标识模式
不再应用 OneLake 角色和安全策略。
SQL 角色和安全策略变为活动状态。
项目所有者必须具有有效的 OneLake 访问权限,否则所有查询都可能失败。
注解
SQL 对象不继承所有权:快捷方式充当 SQL 分析终结点中的表,但有意偏离标准 SQL 所有权链,以保持统一的安全态势。
无继承规则:派生的 SQL 对象(视图、存储过程或函数)不会从对象所有者继承权限。
运行时验证:在执行时针对调用方标识验证权限,确保 SQL 抽象无法规避 OneLake 级别策略。
安全设计:无论数据是通过 SQL、Spark 还是Power BI访问数据,安全策略都保持一致。
控制平面依赖性(严格身份匹配):OneLake 的安全性要求在使用者数据平面的访问验证过程中,所识别的标识与在生产者处授予访问权限的标识相同。 系统验证在源中授予访问权限的特定主体,并且不会通过间接成员身份扩展嵌套组成员身份或推断有效访问权限。
主权匹配:访问权限是根据生成者授予的确切对象 ID 进行评估的。
无嵌套/有效解析:嵌套组成员身份或间接继承不被视为足以强制实施。 有关工作示例,请参阅 OneLake 安全性中用户标识模式的注释。
权限评估行为:权限评估因表类型而异,具体取决于当前的强制执行模型。
快捷表:未满足所需的授权条件时,可能会拒绝访问。 这是一种限制性的执行结果,而不是 OneLake 安全性中基于角色的 DENY 功能。
一般规则:强制实施无法明确验证访问权限时,系统将应用限制性最大的结果。
列级安全性(CLS)设计:CLS 维护严格的列允许列表。
重命名或删除允许的列会使安全规则失效。 虽然规则保留在系统中,但在还原原始列命名之前,该规则将保持非活动状态(拒绝对资源的所有访问)。
同步保护:当策略无效时,元数据同步会被方案设计故意阻止,直到在 OneLake 安全面板中修正规则。
架构验证:重命名不更新安全策略的列会触发 UI 错误,指出列在同步配置之前“不存在”。
角色传播和同步(SLA):
OneLake 安全同步:当 OneLake 安全角色在用户标识模式下更改时,更新不会立即发生。 虽然速度通常很快,但与 SQL 分析终结点同步可能需要长达 5 分钟 的时间。
自动前缀:OneLake 安全角色将传播到带有前缀的
OLS_SQL 分析终结点。同步优先级:安全同步过程定期刷新角色的状态
OLS_。 不支持对这些角色进行手动更改,所有更改将在下一个同步周期内被覆盖。 如果没有同步更改,安全同步不会替代手动更改。
仓库 SQL 安全性和快捷方式:在仓库中使用 SQL 构造定义的安全策略(例如 Row-Level 安全(RLS)、Column-Level 安全性(CLS)或 Object-Level 安全(OLS)仅在仓库(TDS 终结点)的 SQL 执行上下文中强制执行。
重要
通过 OneLake 快捷方式访问仓库中的数据时,这些 SQL 安全语义不会转换为 OneLake 安全策略。 因此,通过快捷方式访问数据的用户可能会看到完整的数据集,而不考虑源仓库中配置的 SQL 安全策略。
局限性
仅适用于读取者:OneLake 安全性主要执行于通过 查看器级别工作区或项目访问数据的用户。 具有更广泛的工作区角色(例如 管理员、 成员或 参与者 )的用户将保留提升的访问权限,而不是 OneLake 安全强制的主要目标。
异常:
快捷方式拒绝行为:对于由快捷方式支持的表,在特定情况下,权限控制仍可拒绝对管理员、成员或参与者的访问权限。
安全同步失败案例:如果安全同步无法正确为某些表或角色应用安全性,则属于这些受影响角色成员的管理员、成员或参与者角色中的用户也可能会遇到受限访问。
用户标识模式下的 RLS:在用户标识模式下配置 Row-Level 安全性(RLS)时,将为所有用户(包括管理员、成员和参与者角色中的用户)强制实施定义的安全规则。
安全同步依赖项:在用户标识模式下,OneLake 安全角色通过安全同步过程同步到 SQL 分析终结点。 在同步完成之前,SQL 可能会使用现有的 SQL 权限状态暂时评估访问权限。 同步完成后,SQL 终结点将反映 OneLake 安全配置。
快捷边界感知:SQL 分析终结点最初可以使用标准 SQL 对象语义评估快捷支持的表。 安全同步发生后,将应用 OneLake 安全策略,以确保访问强制与项目和工作区边界保持一致。
跨工件访问强制计时:通过同步的 OneLake 安全角色强制执行对 OneLake 快捷方式支持的表的访问,这些快捷方式引用来自其他工件的数据。 在同步发生之前,SQL 授权可能会暂时反映以前的权限状态。
快捷方式支持的表的所有权更改:快捷方式支持的表在 SQL 分析终结点中表示为 SQL 对象,因此支持标准的 SQL 所有权操作。 管理命令,例如
ALTER AUTHORIZATION,可以更改依赖快捷方式的表的所有者。 在某些情况下,这可能允许所有权链接行为绕过 OneLake 安全策略,并授予对基础数据的意外访问权限。 在引入其他强制机制之前,管理员应避免修改依赖快捷方式的表的所有权。目标验证停机时间:当快捷方式目标发生更改(例如重命名或 URL 更新)时,数据库会在系统验证新目标时短暂进入 单用户模式 。 在此期间,查询将被阻止。 这些操作通常是快速的,但根据内部进程,可能需要长达 5 分钟才能同步。
- 创建架构快捷方式可能会导致影响验证和延迟元数据同步的已知错误。
委派模式令牌缓存:在委派模式下,SQL 分析终结点将缓存用于代表所有者标识从 OneLake 检索数据的存储访问令牌。 如果 所有者的权限发生更改,则以前颁发的令牌在过期之前可能保持有效。 因此,绑定到所有者标识的访问更改可能不会立即生效,并且可以在令牌过期之前保留,通常最多 30-60 分钟。
对 OneLake 安全 GRANT/DENY 策略的更改会立即强制执行,并且不会因存储令牌缓存而延迟。
活动查询取消:为了维护数据完整性和安全性,如果在执行过程中快捷方式配置发生更改,可能会自动取消活动查询。
行级安全性(RLS)约束:
对于公共预览版,仅支持单表达式表。 动态 RLS 和多表 RLS 不可用。
删除筛选表达式中使用的列会导致元数据同步中断,直到在 OneLake 安全面板中修复 RLS 为止。
角色复杂性和元数据同步:安全角色中的高复杂性(特别是涉及使用 RLS 的大量交集和联合语义)可能会导致安全同步失败。 安全同步失败可防止应用安全策略,并阻止同步元数据的功能。
架构和角色约束:
重命名:OneLake 安全角色绑定到表名称。 重命名表会中断关联,策略不会自动迁移。 这可能会导致意外的数据泄露,直到策略重新应用。
字符限制:OneLake 安全角色名称不能超过 124 个字符;否则,角色创建或同步在 SQL 分析终结点上失败。
OLS_角色修改:不支持对OLS_角色进行用户更改,并可能导致意外行为。
不支持的身份:当前不支持启用邮件的安全组和通讯组。
Lakehouse 所有者要求:
Lakehouse 的所有者必须是管理员、成员或参与者工作区角色的成员;否则,安全性不会应用于 SQL 分析终结点。
Lakehouse 的所有者不能是安全同步工作的服务主体。