SQLServer有各种加密方式,比如使用加密函数进行数据列加密,Dynamic Data Masking(动态数据屏蔽),但是都达不到数据脱敏的效果,特别是动态数据屏蔽,可以强行绕过加密。而数据脱敏的效果应该是在从生产数据库迁移数据库到其它环境时,屏蔽掉敏感数据,而不改变其数据类型。对比Oracle的Data Masking,SQLServer在新版本的Management studio中推出了静态数据屏蔽的功能。本文就是针对这个功能的详细介绍。
使用场景:
工作原理:
静态数据屏蔽发生在列级别。用户选择他们希望屏蔽的列,并且对于所选的每列,他们希望应用哪个屏蔽功能。有几种掩蔽功能可供选择,它们在掩蔽函数中有详细描述。
然后,静态数据屏蔽将创建数据库的副本。对于Azure SQL数据库,通过复制功能执行复制。对于SQL Server,它通过备份操作执行,然后执行还原操作。从那里,对于每列,静态数据掩蔽开始根据所选择的掩蔽功能用掩蔽后数据替换预掩蔽数据。
替换在存储级别完成,因此在静态数据屏蔽完成后,无法从数据库的屏蔽副本中检索预屏蔽数据。
操作步骤:
1. 启动SSMS,连接到您的数据库。在左侧的“对象资源管理器”窗格中,展开“数据库”文件夹。右键单击要屏蔽的数据库,左键单击“任务”,左键单击Mask数据库...(预览):
弹出屏蔽配置窗口,它将显示数据库中的所有表。 这些表由模式表示,然后在模式中按字母顺序排序。
单击表名附近的下拉图标以获取表中所有列的列表,对于表中的每个列,指定列的数据类型以及列是否可为空。可空列是可以接收NULL值作为条目的列。
4. 选择要屏蔽的所有列以及要应用的屏蔽功能,可用的屏蔽类型是Shuffle masking,Group Shuffle masking,Single value masking,NULL masking,String Composite masking:
注意:大多数这些屏蔽功能都有其他配置参数。对于Shuffle masking,静态数据屏蔽提供默认参数。对于Group Shuffle掩码,单值掩码和String Composite掩码,用户必须提供配置参数。要更改或提供配置参数,请单击“配置...”选项,然后在弹出的对话框中为参数指定(备用)值。
屏蔽配置选项可以即时验证与配置和模式相关的错误和警告。检测到的任何内容都会显示为左侧的图标,您可以使用鼠标将鼠标悬停在其上以获取其他详细信息。
在下面的示例中,用户选择的NULL屏蔽不允许NULL值的列(NOT NULL约束)。
在下面的示例中,用户选择的Group Shuffle仅屏蔽一列。由于Group Shuffle需要至少两列,因此发出警告。
5. 完整的屏蔽配置可以保存到XML文件中供以后使用。虽然Azure SQL数据库和内部部署数据库之间的屏蔽功能配置相同,但在保存其他属性(例如备份文件路径)方面存在一些细微差别。要保存配置,请单击“保存配置”,提供文件名,然后单击“保存”。用户可以稍后使用Load Config加载现有配置文件。我们建议对具有大量列的表使用配置文件。
静态数据屏蔽将在用户的Documents文件夹中创建一个名为Static Data Masking的文件夹,并将日志文件放入其中。日志文件可用于调试目的,日志文件的名称显示在配置窗口的底部。
(仅限SQL Server)如果在内部部署数据库上运行静态数据屏蔽,则静态数据屏蔽将执行备份/还原操作。在步骤2:克隆.BAK文件位置,提供将存储备份文件的服务器上的位置。
屏蔽方式介绍:
Null值屏蔽(NULL masking):NULL掩码用NULL替换列中的所有值。如果列不允许NULL值,则静态数据屏蔽工具将返回错误。
单值屏蔽(Single-value Masking):单值屏蔽使用单个固定值替换列中的所有值,该值由用户指定。输入的格式必须可以转换为所选列的类型,要指定值,请单击“配置...”,然后提供值,然后单击“确定”。
洗牌屏蔽(Shuffle Masking):列中的所有值都被拖放到新行,没有生成新数据,洗牌屏蔽提供了在列中维护NULL条目的选项,为此,请单击“配置...”,然后选择“保持NULL位置”框。
Group Shuffle在一个shuffle组中将几列绑定在一起。shuffle组中的列将被混合在一起,用户必须使用Configure ...选项指定shuffle组的名称。组shuffle发生在同一个表中; 如果在多个表中使用相同的shuffle组名,则两个组shuffle是独立的操作。 对于要包含在组中的每个列,组名必须相同。 该名称区分大小写。 多个shuffle组(具有不同的名称)可以在同一个表中发生。
字符串混合屏蔽(String Composite masking):沿模式生成随机字符串。 它适用于必须遵循预定义模式的字符串才能成为有效条目。 例如,美国社会安全号码的格式为123-45-6789。 String Composite masking的语法在用户必须输入模式的对话框中指定。String Composite masking提供了三个可以通过单击它们进行测试的示例模式。 如果单击电话号码,模式框将自动填充生成随机美国电话号码所需的公式。String Composite masking还具有一种高级模式,允许将现有数据的子部分替换为模式生成的字符串。 字符串的替换部分由正则表达式中的捕获组确定。 例如,可以在保留域的同时替换电子邮件的用户名部分,或者可以通过保留区域代码来替换电话号码。
静态数据屏蔽具有以下限制:
1. 静态数据屏蔽不支持具有时态表的数据库。
2. 静态数据屏蔽不会屏蔽内存优化表。
3. 静态数据屏蔽不会屏蔽计算列和标识列。
4. 静态数据屏蔽不支持Azure SQL超大规模数据库。
5. 静态数据屏蔽不支持几何和地理数据类型。
此外,静态数据屏蔽在其屏蔽功能方面存在三个限制:
静态数据屏蔽不会更新直方图统计信息。因此,一旦完成静态数据屏蔽,数据库的屏蔽副本仍可能在直方图统计中包含敏感数据。考虑运行UPDATE STATISTICS来解决此问题。
如果静态数据屏蔽返回错误,则暂停所有屏蔽操作。数据库的副本不会被删除,并且可能包含敏感信息。如果静态数据屏蔽返回错误,则用户负责删除数据库的副本。
(仅限SQL Server)静态数据屏蔽完成后,数据文件和日志文件仍可能包含未分配内存中的敏感数据位。如果允许访问数据文件和日志文件,则可以使用十六进制编辑器检索此敏感数据。
示例:
Table: [dbo].[SpecialRole]
1. 使用“单值”模式进行数据屏蔽:
选择屏蔽功能作为特殊列的“单值”:
将产生一个命名的新数据库:
特殊列的所有行都由单个值“1”替换:
select top 4 * from [dbo].[SpecialRole]
使用'Shuffle'模式进行数据屏蔽:
选择屏蔽功能为特殊列的“随机播放”:
列中的所有值都被打乱拖放到新行:
使用'String Composite'模式进行数据屏蔽:
选择屏蔽功能为特殊列的“随机播放”:
编辑模仿样本的数据格式:
样本模式:
自定义模式模式:
列中的所有值都替换为随机数字,字母或符号:
select top 4 * from [dbo].[SpecialRole]
外键字段:IDSystem
Note:
1. 生成数据库的掩码副本后,您应手动更新统计信息:
EXEC sp_updatestats;
2.如果静态数据掩码返回错误,则应放弃此掩码复制。