SQL Server 动态掩码

SQL Server 动态掩码

介绍

动态数据掩码(DDM)是SQL Server 2016引入的一个新功能。目的就是限制没有权限的人去看到一些隐私信息。管理员用户能够决定哪些字段是需要被掩码的,那么如何在不改变应用程序代码的基础上掩码?还要保证无论如何访问数据,都是一致的。

这是Azure SQL数据库中首次引入的特性,它在云上接受用户的测试,并已迁移到本地产品。我想很多其他的新特性也会遵循这条方式(云–本地)。

需要注意的是与我之前的行级别数据安全一样,这些都是数据安全相关内容(https://www.cnblogs.com/wenBlog/p/8193935.html),这个掩码功能为数据脱敏提供了一个更好的解决方案。

列数据掩码

首先创建一个在一些数据上带有掩码版的表。我将在表定义中开始的一个字段中添加一个掩码。注意,这样做的方式是在数据类型之后使用“mask with()”格式,但是在NULL和默认选项之前,要在圆括号内包含FUNCTION = “,它指定了我们的函数。在引号内,我们指定掩码。CREATE TABLE语句如下

CREATE TABLE MyTable
  ( MySSN VARCHAR (10) MASKED WITH (FUNCTION = 'default()') DEFAULT ('0000000000' )
 , MyName VARCHAR (200) DEFAULT ( ' ')
 , MyEmail VARCHAR (250) DEFAULT ( '')
 , MyInt int
)
GO
INSERT dbo. MyTable
 ( MySSN , MyName, MyEmail , MyInt)
VALUES
 ( '1234567890', 'Steve Jones', 'SomeSteve@SomeDomain.com', 10 )

 

如果创建者查询这个表,就会看到一个普通的表。我得到所有的数据,当它被插入时。这是因为我是一个有权限的用户。同理那些具有dbo特权(db_owner或sysadmin角色)的用户将不会看到屏蔽数据。现在创建一个正常的用户没有高权限的用户。当然,我需要授予普通的SQL Server权限来查看表中的数据。

CREATE USER mytest WITHOUT LOGIN
GRANT SELECT ON mytable TO mytest

 

现在我们可以用这个用户查询这个表,看一下有什么不同。

<span>SQL Server 动态掩码</span>

我们可以看到第一列包含掩码数据。只有x出现在数据的位置。这就实现了我想要的,即对非特权用户隐藏数据。注意,磁盘上的数据没有更改。数据只有在返回给非特权用户时才会被屏蔽。
我可以在执行计划的最后一部分看到这种情况。我需要授予用户查看计划的权限,但是当我这样做时,我看到的是用户的计划,使用的是上面相同的查询。

<span>SQL Server 动态掩码</span>

.

我可以在表上定义其他类型的掩码。有一个自定义的掩码格式,允许控制显示的内容,一个电子邮件地址的遮罩,和一个随机的数字遮罩。我们将在另一篇文章中详细讨论这些问题。

现在可以添加掩码到另一列上面,比如邮件MyEmail列,可以使用邮件掩码的格式,具体代码如下:

ALTER TABLE dbo.MyTable
 ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')
GO

 

然后查询结果如下:

<span>SQL Server 动态掩码</span>

也可以对多个和列进行掩码

CREATE TABLE MySecondTable (
  MyEmail VARCHAR( 250) MASKED WITH (FUNCTION= 'email()')
, MySSN VARCHAR (10) MASKED WITH (FUNCTION ='default()')
, MyID INT MASKED WITH (FUNCTION ='random(1,4)')
)
GO
INSERT MySecondTable
 VALUES
   ( 'myname@mydomain.com', '1234567890', 100 )
 , ( 'abrother@mycorp.com' , '0123456789' , 555)
 , ( 'somesister@somecompany.org' , '9876543210' , 999)

 


查询结果如下:

<span>SQL Server 动态掩码</span>

正如我们所看到的,我从不同的行得到不同的掩码,每个掩码应用于特定行的数据。

允许用户看到掩码真实数据

SQL Server 2016中有一个新的DDM权限。这是UNMASK权限,它和其他任何权限一样被授予。让我们来看看这是如何工作的。我将创建一个具有与现有用户相同权限的新用户。然后我将查询该表。

<span>SQL Server 动态掩码</span>

与之前相似的结果,然后我们在给用授权打开掩码。

<span>SQL Server 动态掩码</span>

现在我们可以看到数据的显示方式与特权用户的显示方式相同。对于NewTester用户,所有的数据都是“未屏蔽的”。
然而,这也有不利的一面。UNMASK权限在数据库范围内授予用户。没有按表或列划分的粒度。如果用户具有UNMASK,他们可以查看存储在数据库中的表中具有SELECT权限的所有数据。我们可以通过使用Newtest查询第一个表来看到这一点。

<span>SQL Server 动态掩码</span>

移除掩码

代码如下:

ALTER TABLE dbo.MySecondTable
  ALTER COLUMN MySSN DROP MASKED;

 

一旦我这样做,用户将直接看到真实数据。

<span>SQL Server 动态掩码</span>

MySSN列的数据是未屏蔽的,但是MyEmail和MyID的数据仍然是屏蔽的

总结

动态数据屏蔽是一个很好的新特性,旨在更容易地保护数据不受非特权用户的影响。这可以在数据库中实现,而不需要更改任何应用程序代码,从而允许您以最小的成本和工作量对应用程序用户屏蔽敏感数据。我还要提醒您,这并不是真正的安全特性。存储在磁盘和表中的数据不会以任何方式更改。这仍然是纯文本数据,如果用户能够查询系统,他们仍然可以潜在地查询您的数据并发现其值。

无论如何,这个特性对于尤其是需要数据脱密使用的系统来说无疑是有帮助的。当然17以后功能也有了长足的进步后面有机会我会继续介绍。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119663.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea 插件库永久激活破解方法[通俗易懂]

    idea 插件库永久激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • Pytest(3)fixture的使用

    Pytest(3)fixture的使用fixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

    2022年7月29日
  • awk 数组学习

    awk 数组学习awk是Linux一个必不可少的文本处理工具,其编程简单,功能强大。其中awk处理文本的几块比较常用:1、行分隔;2、正则表达式匹配;3、字符串处理;4、awk数组。接下来主要介绍一下awk数组的相关内容。awk数组特点:(1)、是一种关联数组(AssociativeArrays),下表可以是数字也可以是字符串,(2)、数组名和元素无需提前声明,(3)、无需指定数…

    2022年7月19日
  • linux系统重启网卡命令_重启linux网卡

    linux系统重启网卡命令_重启linux网卡在实际工作中,经常会遇到Linux系统进行重启网卡的操作。接下来是小编为大家收集的linux系统重启网卡方法,希望能帮到大家。linux系统重启网卡方法一、servicenetworkrestart1、首先用CRT工具连接到Linux命令行界面。或者进入操作系统界面,选择终端输入。2、如果我们对所有的网卡进行重启操作。可以尝试输入:servicenetworkrestart命令进行操…

    2022年4月19日
  • 群晖nas 文件服务器,群晖nas挂到云服务器上

    群晖nas 文件服务器,群晖nas挂到云服务器上群晖nas挂到云服务器上内容精选换一换在公有云上部署SAPHANA所需要的云服务如下。无法直接从云备份控制台查看备份中的数据,您可以通过以下几种方式进行查看:云服务器备份使用云服务器备份创建镜像后,再使用镜像创建云服务器。登录云服务器,查看服务器中的数据。云硬盘备份使用云硬盘备份创建新的云硬盘后,将云硬盘挂载至云服务器上。登录云服务器,查看磁盘中的数据。SFSTurbo备份使用SFSTur…

    2022年6月26日
  • C#自定义控件之-winform美化「建议收藏」

    C#自定义控件之-winform美化「建议收藏」对于系统自带的窗体,博主实在不敢恭维,测试时使用方便快捷,但真正项目中无法使用,只因不美观的外表,每次都很头疼窗体的美化,这里列出一些需要解决的问题和自己收集到的解决方法,如有错误请指出。废话不多说先上一张最近写的一个小工具的效果图。以上是工具的基本截图,在工具的制作中对窗体的自定义包括以下几点:一、无边框拖动窗体当设置窗体的fromboderstyle为null时,系统自带的窗体

    2022年5月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号