SQL Server 2016新特性:动态数据屏蔽(DDM

  开发人员或者数据库管理员能够控制敏感数据的暴露程度,并且在数据库层面生成数据,大大简化了数据库应用层的安全设计和编码。

  在SQL Server 2016上推出了一个很强的新特性叫做Dynamic Data Masking (DDM)-动态数据屏蔽,为了尽可能少的对应用层造成影响,该特性允许开发人员或者数据库管理员能够控制敏感数据的暴露程度,并且在数据库层面生成数据,大大简化了数据库应用层的安全设计和编码。

  动态数据屏蔽并不会真正改动表中存储的实际数据,只是在查询的时候应用该特性控制查询返回的数据,动态数据屏蔽支持四种数据屏蔽函数,可以通过以下四个函数在数据库层面进行屏蔽:

  注:应用数据屏蔽函数有两种方式,在创建表的时候应用或者在现有的表上使用ALTER语句应用。

  如果是字符串类型的,将会在字符串后面添加X,最多能添加4个,如果字符串包含的字符少于4个,则会以实际的X数目显示。

  首先我们来创建一张表,命名为“DDM_Student_Sample”,在创建的时候,我们在Student_DOB列上应用以下默认屏蔽函数,此时Student_DOB列上的真实数据将不能被正常访问,哪怕用户具有读取表的权限,当数据被访问到的时候,将会返回1900-01-01 00.00.00.000格式的数据。

  创建完成以后,我们需要插入一些数据来验证默认屏蔽函数的作用。使用以下语句在表中插入四行数据。

  插入数据以后,我们将采用以下脚本检查表中的真实数据。我们使用具有足够权限的高级用户来做查询,这类用户能够查看真实数据,只是在返回的时候会提示敏感信息。

  现在我们创建一个用户 ,使用以下语句对其授DDM_Student_Sample表的读取权。

  在这张表的Student_DOB列我们已经应用了默认屏蔽函数,接下来我们看在查询到的时候数据会如何返回。

  在上面的结果中我们看到,用户虽然具有访问表的权限,但并不能读取到真实的数据,因为应用了默认屏蔽函数,所以该列最终返回1900-01-01 00.00.00.000。

  如果你想用权限更低的用户,比如DDM_Read,然后我们对这类用户授非屏蔽权限。

  随机屏蔽函数只对数字类型起作用。它会将某一个范围内的值随机显示。在下面的案例中,我们在Student_ID列上应用了随机屏蔽函数。

  应用完随机屏蔽函数之后,我们通过DDM_Read用户访问表的数据,结果如下所示:

  在上面的表中,我们看到Student_ID列的真实数据被随机的数值代替,同样,如果你想尝试用权限低一点的用户,可以授非屏蔽权限。

  因为自定义屏蔽函数的使用,Student_Name列上的值将会如上图显示。

  此DDM功能将显示电子邮件地址的第一个字符,用XXX @ XXXX屏蔽其余字符,直到后缀“”。 例如,如果我们对这样的电子邮件地址应用电子邮件DDM功能,则此电子邮件地址将显示为“”。

  因此,在上面的图像中,我们可以看到在对表具有较少(只读)权限的用户应用默认,随机,自定义字符串和电子邮件动态数据屏蔽功能后,数据的外观。

  删除所有动态数据屏蔽功能后,敏感数据将对用户DDM_Read可见,如下图所示。

  SQL Server 2016中的动态数据屏蔽功能允许用户在数据库级别屏蔽数据,而不会更改或混淆表中的实际存储数据。我们可以说这个功能为DBA增加了一个优点,允许他们从具有较少权限的用户集中隐藏敏感数据。 此功能节省了当供应商访问您的公司以修复与数据库中的数据相关的某些问题时,对数据进行模糊处理或屏蔽的额外工作量。

相关阅读