本篇文章给你们带来的内容是关于SQLServer动态掩码的详细介绍(代码示例),有必定的参考价值,有须要的朋友能够参考一下,但愿对你有所帮助。php
动态数据掩码(DDM)是SQL Server 2016引入的一个新功能。目的就是限制没有权限的人去看到一些隐私信息。管理员用户可以决定哪些字段是须要被掩码的,那么如何在不改变应用程序代码的基础上掩码?还要保证不管如何访问数据,都是一致的。html
这是Azure SQL数据库中首次引入的特性,它在云上接受用户的测试,并已迁移到本地产品。我想不少其余的新特性也会遵循这条方式(云--本地)。数据库
须要注意的是与我以前的行级别数据安全同样,这些都是数据安全相关内容(推荐课程:MySQL教程)安全
列数据掩码并发
首先建立一个在一些数据上带有掩码版的表。我将在表定义中开始的一个字段中添加一个掩码。注意,这样作的方式是在数据类型以后使用“mask with()”格式,可是在NULL和默认选项以前,要在圆括号内包含FUNCTION = ",它指定了咱们的函数。在引号内,咱们指定掩码。CREATE TABLE语句以下dom
1函数 2测试 3spa 4code 5 6 7 8 9 10 11 |
|
若是建立者查询这个表,就会看到一个普通的表。我获得全部的数据,当它被插入时。这是由于我是一个有权限的用户。同理那些具备dbo特权(db_owner或sysadmin角色)的用户将不会看到屏蔽数据。如今建立一个正常的用户没有高权限的用户。固然,我须要授予普通的SQL Server权限来查看表中的数据。
1 2 |
|
如今咱们能够用这个用户查询这个表,看一下有什么不一样。
咱们能够看到第一列包含掩码数据。只有x出如今数据的位置。这就实现了我想要的,即对非特权用户隐藏数据。注意,磁盘上的数据没有更改。数据只有在返回给非特权用户时才会被屏蔽。
我能够在执行计划的最后一部分看到这种状况。我须要授予用户查看计划的权限,可是当我这样作时,我看到的是用户的计划,使用的是上面相同的查询。
我能够在表上定义其余类型的掩码。有一个自定义的掩码格式,容许控制显示的内容,一个电子邮件地址的遮罩,和一个随机的数字遮罩。咱们将在另外一篇文章中详细讨论这些问题。
如今能够添加掩码到另外一列上面,好比邮件MyEmail列,可使用邮件掩码的格式,具体代码以下:
1 2 3 |
|
而后查询结果以下:
也能够对多个和列进行掩码
1 2 3 4 5 6 7 8 |
|
查询结果以下:
正如咱们所看到的,我从不一样的行获得不一样的掩码,每一个掩码应用于特定行的数据。
容许用户看到掩码真实数据
SQL Server 2016中有一个新的DDM权限。这是UNMASK权限,它和其余任何权限同样被授予。让咱们来看看这是如何工做的。我将建立一个具备与现有用户相同权限的新用户。而后我将查询该表。
与以前类似的结果,而后咱们在给用受权打开掩码。
如今咱们能够看到数据的显示方式与特权用户的显示方式相同。对于NewTester用户,全部的数据都是“未屏蔽的”。
然而,这也有不利的一面。UNMASK权限在数据库范围内授予用户。没有按表或列划分的粒度。若是用户具备UNMASK,他们能够查看存储在数据库中的表中具备SELECT权限的全部数据。咱们能够经过使用Newtest查询第一个表来看到这一点。
代码以下:
1 2 |
|
一旦我这样作,用户将直接看到真实数据。
MySSN列的数据是未屏蔽的,可是MyEmail和MyID的数据仍然是屏蔽的
动态数据屏蔽是一个很好的新特性,旨在更容易地保护数据不受非特权用户的影响。这能够在数据库中实现,而不须要更改任何应用程序代码,从而容许您以最小的成本和工做量对应用程序用户屏蔽敏感数据。我还要提醒您,这并非真正的安全特性。存储在磁盘和表中的数据不会以任何方式更改。这仍然是纯文本数据,若是用户可以查询系统,他们仍然能够潜在地查询您的数据并发现其值。
不管如何,这个特性对于尤为是须要数据脱密使用的系统来讲无疑是有帮助的。固然17之后功能也有了长足的进步后面有机会我会继续介绍。