实现 Microsoft Fabric 数据仓库中的行级别安全性

适用于:✅ SQL 分析终结点和 Microsoft Fabric 中的仓库

借助 Fabric 仓库和 SQL 分析终结点中的行级别安全性 (RLS),可以根据用户角色和谓词控制对数据库表中行的访问。 有关详细信息,请参阅实现 Fabric 数据仓库中的行级别安全性

本指南将分步演练如何在 Microsoft Fabric 仓库或 SQL 分析终结点中实现行级别安全性。

先决条件

在开始之前,请确保具有以下各项:

  1. 具有激活容量或试用容量的 Fabric 工作区。
  2. 湖屋上的 Fabric 仓库或 SQL 分析终结点。
  3. 工作区上的管理员、成员或参与者权限,或仓库或 SQL 分析终结点上的提升的权限。

1.连接

  1. 使用对仓库或 SQL 分析终结点具有提升的访问权限的帐户登录。 (工作区的管理员/成员/参与者角色,或仓库或 SQL 分析终结点上的控制权限)。
  2. 打开 Fabric 工作区并导航到要在其中应用行级别安全性的仓库或 SQL 分析终结点。

2.定义安全策略

  1. 确定要用于控制数据访问权限的角色和谓词。 角色定义谁可以访问数据,谓词定义访问条件。

  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 
    
  3. YourSecurityPolicy 替换为策略名称,tvf_securitypredicate 替换为谓词函数的名称,sampleschema 替换为架构的名称,sampletable 替换为目标表的名称。

  4. UserName_column 替换为表中包含用户名的列。

  5. WHERE @UserName = USER_NAME(); 替换为与所需的基于谓词的安全筛选器匹配的 WHERE 子句。 例如,这会筛选映射到 @UserName 参数的 UserName 列与系统函数 USER_NAME() 的结果匹配的数据。

  6. 重复这些步骤,根据需要为其他表创建安全策略。

3.测试行级别安全性

  1. 以属于具有关联安全策略的角色成员的用户身份登录 Fabric。 使用以下查询验证表中应匹配的值。

    SELECT USER_NAME() 
    
  2. 查询数据库表以验证行级别安全性是否按预期工作。 用户应只看到满足其角色中定义的安全谓词的数据。 例如:

    SELECT * FROM sampleschema.sampletable
    
  3. 用户的类似筛选结果将与使用 Microsoft Entra 身份验证进行数据库访问的其他应用程序进行筛选。 有关详细信息,请参阅 Microsoft Entra 身份验证作为 Microsoft Fabric 中 SQL 身份验证的替代方法

4.监视和维护行级别安全性

随着安全性要求的变化,定期监视和更新行级别安全策略。 跟踪角色分配并确保用户具有适当的访问权限。