SQLServer数据脱敏
  SQLServer有各种加密⽅式,⽐如使⽤加密函数进⾏数据列加密,Dynamic Data Masking(动态数据屏蔽),但是都达不到数据脱敏的效果,特别是动态数据屏蔽,可以强⾏绕过加密。⽽数据脱敏的效果应该是在从⽣产数据库迁移数据库到其它环境时,屏蔽掉敏感数据,⽽不改变其数据类型。对⽐Oracle的Data Masking,SQLServer在新版本的Management studio中推出了静态数据屏蔽的功能。本⽂就是针对这个功能的详细介绍。
  使⽤场景:
  •开发和测试
  •分析和业务报告
  • 故障排除
  •与顾问,研究团队或任何第三⽅共享数据库
  ⼯作原理:
  静态数据屏蔽发⽣在列级别。⽤户选择他们希望屏蔽的列,并且对于所选的每列,他们希望应⽤哪个屏蔽功能。有⼏种掩蔽功能可供选择,它们在掩蔽函数中有详细描述。
  然后,静态数据屏蔽将创建数据库的副本。对于Azure SQL数据库,通过复制功能执⾏复制。对于SQL Server,它通过备份操作执⾏,然后执⾏还原操作。从那⾥,对于每列,静态数据掩蔽开始根据所选择的掩蔽功能⽤掩蔽后数据替换预掩蔽数据。
  替换在存储级别完成,因此在静态数据屏蔽完成后,⽆法从数据库的屏蔽副本中检索预屏蔽数据。
  操作步骤:
写老师的诗句
  1. 启动SSMS,连接到您的数据库。在左侧的“对象资源管理器”窗格中,展开“数据库”⽂件夹。右键单击要屏蔽的数据库,左键单击“任务”,左键单击Mask数据库...(预览):
  2. 弹出屏蔽配置窗⼝,它将显⽰数据库中的所有表。这些表由模式表⽰,然后在模式中按字母顺序排序。
  3. 单击表名附近的下拉图标以获取表中所有列的列表,对于表中的每个列,指定列的数据类型以及列是否可为空。可空列是可以接收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加载现有配置⽂件。我们建议对具有⼤量列的表使⽤配置⽂件。
  6. 静态数据屏蔽将在⽤户的Documents⽂件夹中创建⼀个名为Static Data Masking的⽂件夹,并将⽇志⽂件放⼊其中。⽇志⽂件可⽤于调试⽬的,⽇志⽂件的名称显⽰在配置窗⼝的底部。
  7. (仅限SQL Server)如果在内部部署数据库上运⾏静态数据屏蔽,则静态数据屏蔽将执⾏备份/还原操作。在步骤2:克隆.BAK⽂件
位置,提供将存储备份⽂件的服务器上的位置。
男游戏名  屏蔽⽅式介绍:
  Null值屏蔽(NULL masking):NULL掩码⽤NULL替换列中的所有值。如果列不允许NULL值,则静态数据屏蔽⼯具将返回错误。 
  单值屏蔽(Single-value Masking):单值屏蔽使⽤单个固定值替换列中的所有值,该值由⽤户指定。输⼊的格式必须可以转换为所选列的类型,要指定值,请单击“配置...”,然后提供值,然后单击“确定”。
  洗牌屏蔽(Shuffle Masking):列中的所有值都被拖放到新⾏,没有⽣成新数据,洗牌屏蔽提供了在列中维护NULL条⽬的选项,为此,请单击“配置...”,然后选择“保持NULL位置”框。
  组洗牌屏蔽(Group Shuffle Masking):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)静态数据屏蔽完成后,数据⽂件和⽇志⽂件仍可能包含未分配内存中的敏感数据位。如果允许访问数据⽂件和⽇志⽂件,则可以使⽤⼗六进制编辑器检索此敏感数据。
  ⽰例:
丁俊晖2013世锦赛
  Test DB:  DM_Original
  Table: [dbo].[SpecialRole]
  1. 使⽤“单值”模式进⾏数据屏蔽:孙浩俊
  选择屏蔽功能作为特殊列的“单值”:
  将产⽣⼀个命名的新数据库:
  特殊列的所有⾏都由单个值“1”替换:
  select top 4 * from [dbo].[SpecialRole]
  2. 使⽤'Shuffle'模式进⾏数据屏蔽:
美国电话号码  选择屏蔽功能为特殊列的“随机播放”:
  列中的所有值都被打乱拖放到新⾏:
  3. 使⽤'String Composite'模式进⾏数据屏蔽:
  选择屏蔽功能为特殊列的“随机播放”:
  编辑模仿样本的数据格式:
  样本模式:
  ⾃定义模式模式:
  列中的所有值都替换为随机数字,字母或符号:
  select top 4 * from [dbo].[SpecialRole]
  4. 外键字段的数据屏蔽:花荣的绰号
  外键字段:IDSystem
  Note:
  1. ⽣成数据库的掩码副本后,您应⼿动更新统计信息:  EXEC sp_updatestats;
  2.如果静态数据掩码返回错误,则应放弃此掩码复制。