如何在 Synapse 数据仓库中实现动态数据掩码

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

动态数据掩码是一种先进的数据保护技术,可帮助组织保护其数据库中的敏感信息。 它允许你定义特定列的掩码规则,确保只有经过授权的用户才能看到原始数据,同时对其他人隐藏该数据。 动态数据掩码根据用户的访问权限动态更改提供给用户的数据,从而提供额外的一层安全性。

有关详细信息,请参阅 Fabric 数据仓库中的动态数据掩码

先决条件

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

  1. 具有激活容量或试用容量的 Fabric 工作区。
  2. 仓库。
    1. 动态数据掩码适用于 SQL 分析终结点。 可以使用 ALTER TABLE ... ALTER COLUMN 向现有列添加掩码,如本文后面部分所示。
    2. 本练习使用仓库。
  3. 若要进行管理,用户需要具有工作区的“管理员”、“成员”或“参与者”权限,或者对仓库的提升权限。
    1. 本教程中为“管理员帐户”。
  4. 若要进行测试,用户不需要具有工作区的“管理员”、“成员”或“参与者”权限,或者对仓库的提升权限。
    1. 本教程中为“测试用户”。

1.连接

  1. 打开 Fabric 工作区并导航到要应用动态数据掩码的仓库。
  2. 使用对仓库具有提升访问权限的帐户登录,可以是工作区上的“管理员”/“成员”/“参与者”角色,也可以是仓库上的控制权限。

2.配置动态数据掩码

  1. 使用管理帐户登录 Fabric 门户。

  2. 在 Fabric 工作区中,导航到仓库。

  3. 选择“新建 SQL 查询”选项,然后在“空白”下,选择“新建 SQL 查询”

  4. 在 SQL 脚本中,使用 MASKED WITH FUNCTION 子句定义动态数据掩码规则。 例如:

    CREATE TABLE dbo.EmployeeData (
        EmployeeID INT
        ,FirstName VARCHAR(50) MASKED WITH (FUNCTION = 'partial(1,"-",2)') NULL
        ,LastName VARCHAR(50) MASKED WITH (FUNCTION = 'default()') NULL
        ,SSN CHAR(11) MASKED WITH (FUNCTION = 'partial(0,"XXX-XX-",4)') NULL
        ,email VARCHAR(256) NULL
        );
    GO
    INSERT INTO dbo.EmployeeData
        VALUES (1, 'TestFirstName', 'TestLastName', '123-45-6789','email@youremail.com');
    GO
    INSERT INTO dbo.EmployeeData
        VALUES (2, 'First_Name', 'Last_Name', '000-00-0000','email2@youremail2.com');
    GO
    
    • FirstName 列仅显示字符串的第一个字符和最后两个字符,中间用 - 连接。
    • LastName 列显示 XXXX
    • SSN 列显示 XXX-XX-,后跟字符串的最后四个字符。
  5. 选择“运行”按钮以执行脚本。

  6. 确认执行该脚本。

  7. 脚本会将指定的动态数据掩码规则应用于表中的指定列。

3.测试动态数据掩码

应用动态数据掩码规则后,可以通过对工作区没有“管理员”、“成员”或“参与者”权限,或者对仓库没有提升权限的测试用户查询表来测试掩码。

  1. 以测试用户(例如 TestUser@contoso.com)身份登录 Azure Data Studio 或 SQL Server Management Studio 等工具。
  2. 以测试用户身份对表运行查询。 掩码数据根据定义的规则来显示。
    SELECT * FROM dbo.EmployeeData;
    
  3. 使用管理员帐户,向测试用户授予 UNMASK 权限。
    GRANT UNMASK ON dbo.EmployeeData TO [TestUser@contoso.com];
    
  4. 以测试用户身份验证以 TestUser@contoso.com 登录的用户是否可以看到未掩码数据。
    SELECT * FROM dbo.EmployeeData;
    
  5. 使用管理员帐户,撤销测试用户的 UNMASK 权限。
    REVOKE UNMASK ON dbo.EmployeeData TO [TestUser];
    
  6. 验证测试用户是否看不到未掩码数据,只能看到掩码数据。
    SELECT * FROM dbo.EmployeeData;
    
  7. 使用管理员帐户,可以向角色授予 UNMASK 权限以及撤销该权限
    GRANT UNMASK ON dbo.EmployeeData TO [TestRole];
    REVOKE UNMASK ON dbo.EmployeeData TO [TestRole];
    

4.管理和修改动态数据掩码规则

若要管理或修改现有的动态数据掩码规则,请创建新的 SQL 脚本。

  1. 可以使用 MASKED WITH FUNCTION 子句将掩码添加到现有列:

    ALTER TABLE dbo.EmployeeData
    ALTER COLUMN [email] ADD MASKED WITH (FUNCTION = 'email()');
    GO
    
    ALTER TABLE dbo.EmployeeData 
    ALTER COLUMN [email] DROP MASKED;
    

5.清理

  1. 要清理此测试表,请运行以下语句:
    DROP TABLE dbo.EmployeeData;