如何在 Synapse 数据仓库中实现动态数据掩码
适用于:✅SQL 分析终结点和 Microsoft Fabric 中的仓库
动态数据掩码是一种先进的数据保护技术,可帮助组织保护其数据库中的敏感信息。 它允许你定义特定列的掩码规则,确保只有经过授权的用户才能看到原始数据,同时对其他人隐藏该数据。 动态数据掩码根据用户的访问权限动态更改提供给用户的数据,从而提供额外的一层安全性。
有关详细信息,请参阅 Fabric 数据仓库中的动态数据掩码。
先决条件
在开始之前,请确保具有以下各项:
- 具有激活容量或试用容量的 Fabric 工作区。
- 仓库。
- 动态数据掩码适用于 SQL 分析终结点。 可以使用
ALTER TABLE ... ALTER COLUMN
向现有列添加掩码,如本文后面部分所示。 - 本练习使用仓库。
- 动态数据掩码适用于 SQL 分析终结点。 可以使用
- 若要进行管理,用户需要具有工作区的“管理员”、“成员”或“参与者”权限,或者对仓库的提升权限。
- 本教程中为“管理员帐户”。
- 若要进行测试,用户不需要具有工作区的“管理员”、“成员”或“参与者”权限,或者对仓库的提升权限。
- 本教程中为“测试用户”。
1.连接
- 打开 Fabric 工作区并导航到要应用动态数据掩码的仓库。
- 使用对仓库具有提升访问权限的帐户登录,可以是工作区上的“管理员”/“成员”/“参与者”角色,也可以是仓库上的控制权限。
2.配置动态数据掩码
使用管理帐户登录 Fabric 门户。
在 Fabric 工作区中,导航到仓库。
选择“新建 SQL 查询”选项,然后在“空白”下,选择“新建 SQL 查询”。
在 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-
,后跟字符串的最后四个字符。
选择“运行”按钮以执行脚本。
确认执行该脚本。
脚本会将指定的动态数据掩码规则应用于表中的指定列。
3.测试动态数据掩码
应用动态数据掩码规则后,可以通过对工作区没有“管理员”、“成员”或“参与者”权限,或者对仓库没有提升权限的测试用户查询表来测试掩码。
- 以测试用户(例如 TestUser@contoso.com)身份登录 Azure Data Studio 或 SQL Server Management Studio 等工具。
- 以测试用户身份对表运行查询。 掩码数据根据定义的规则来显示。
SELECT * FROM dbo.EmployeeData;
- 使用管理员帐户,向测试用户授予
UNMASK
权限。GRANT UNMASK ON dbo.EmployeeData TO [TestUser@contoso.com];
- 以测试用户身份验证以 TestUser@contoso.com 登录的用户是否可以看到未掩码数据。
SELECT * FROM dbo.EmployeeData;
- 使用管理员帐户,撤销测试用户的
UNMASK
权限。REVOKE UNMASK ON dbo.EmployeeData TO [TestUser];
- 验证测试用户是否看不到未掩码数据,只能看到掩码数据。
SELECT * FROM dbo.EmployeeData;
- 使用管理员帐户,可以向角色授予
UNMASK
权限以及撤销该权限GRANT UNMASK ON dbo.EmployeeData TO [TestRole]; REVOKE UNMASK ON dbo.EmployeeData TO [TestRole];
4.管理和修改动态数据掩码规则
若要管理或修改现有的动态数据掩码规则,请创建新的 SQL 脚本。
可以使用
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.清理
- 要清理此测试表,请运行以下语句:
DROP TABLE dbo.EmployeeData;