实现 Microsoft Fabric 数据仓库中的行级别安全性
适用于:✅ SQL 分析终结点和 Microsoft Fabric 中的仓库
借助 Fabric 仓库和 SQL 分析终结点中的行级别安全性 (RLS),可以根据用户角色和谓词控制对数据库表中行的访问。 有关详细信息,请参阅实现 Fabric 数据仓库中的行级别安全性。
本指南将分步演练如何在 Microsoft Fabric 仓库或 SQL 分析终结点中实现行级别安全性。
先决条件
在开始之前,请确保具有以下各项:
- 具有激活容量或试用容量的 Fabric 工作区。
- 湖屋上的 Fabric 仓库或 SQL 分析终结点。
- 工作区上的管理员、成员或参与者权限,或仓库或 SQL 分析终结点上的提升的权限。
1.连接
- 使用对仓库或 SQL 分析终结点具有提升的访问权限的帐户登录。 (工作区的管理员/成员/参与者角色,或仓库或 SQL 分析终结点上的控制权限)。
- 打开 Fabric 工作区并导航到要在其中应用行级别安全性的仓库或 SQL 分析终结点。
2.定义安全策略
确定要用于控制数据访问权限的角色和谓词。 角色定义谁可以访问数据,谓词定义访问条件。
创建安全谓词。 安全谓词是确定用户可以访问哪些行的条件。 可以将安全谓词创建为内联表值函数。 此简单练习假设数据表中有一个列
UserName_column
,其中包含相关用户名,由系统函数 USER_NAME() 填充。-- Creating schema for Security CREATE SCHEMA Security; GO -- Creating a function for the SalesRep evaluation CREATE FUNCTION Security.tvf_securitypredicate(@UserName AS varchar(50)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS tvf_securitypredicate_result WHERE @UserName = USER_NAME(); GO -- Using the function to create a Security Policy CREATE SECURITY POLICY YourSecurityPolicy ADD FILTER PREDICATE Security.tvf_securitypredicate(UserName_column) ON sampleschema.sampletable WITH (STATE = ON); GO
将
YourSecurityPolicy
替换为策略名称,tvf_securitypredicate
替换为谓词函数的名称,sampleschema
替换为架构的名称,sampletable
替换为目标表的名称。将
UserName_column
替换为表中包含用户名的列。将
WHERE @UserName = USER_NAME();
替换为与所需的基于谓词的安全筛选器匹配的WHERE
子句。 例如,这会筛选映射到@UserName
参数的UserName
列与系统函数 USER_NAME() 的结果匹配的数据。重复这些步骤,根据需要为其他表创建安全策略。
3.测试行级别安全性
以属于具有关联安全策略的角色成员的用户身份登录 Fabric。 使用以下查询验证表中应匹配的值。
SELECT USER_NAME()
查询数据库表以验证行级别安全性是否按预期工作。 用户应只看到满足其角色中定义的安全谓词的数据。 例如:
SELECT * FROM sampleschema.sampletable
用户的类似筛选结果将与使用 Microsoft Entra 身份验证进行数据库访问的其他应用程序进行筛选。 有关详细信息,请参阅 Microsoft Entra 身份验证作为 Microsoft Fabric 中 SQL 身份验证的替代方法。
4.监视和维护行级别安全性
随着安全性要求的变化,定期监视和更新行级别安全策略。 跟踪角色分配并确保用户具有适当的访问权限。