动态数据掩码(DDM)是SQL Server 2016引入的一个新功用。目标就是限定没有权限的人去看到一些隐私信息。管理员用户可以决议哪些字段是须要被掩码的,那末如安在不转变运用程序代码的基础上掩码?还要保证无论怎样接见数据,都是一致的。
这是Azure SQL数据库中初次引入的特征,它在云上接受用户的测试,并已迁移到当地产物。我想许多其他的新特征也会遵照这条体式格局(云--当地)。
须要注重的是与我之前的行级别数据平安一样,这些都是数据平安相干内容(引荐课程:MySQL教程)
列数据掩码
起首建立一个在一些数据上带有掩码版的表。我将在表定义中最先的一个字段中增加一个掩码。注重,如许做的体式格局是在数据范例今后运用“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
如今我们可以用这个用户查询这个表,看一下有什么差别。
我们可以看到第一列包括掩码数据。只要x出如今数据的位置。这就完成了我想要的,即对非特权用户隐蔽数据。注重,磁盘上的数据没有变动。数据只要在返回给非特权用户时才会被屏障。
我可以在执行设计的末了一部分看到这类状况。我须要授与用户检察设计的权限,然则当我如许做时,我看到的是用户的设计,运用的是上面雷同的查询。
我可以在表上定义其他范例的掩码。有一个自定义的掩码花样,许可掌握显现的内容,一个电子邮件地址的遮罩,和一个随机的数字遮罩。我们将在另一篇文章中细致议论这些题目。
如今可以增加掩码到另一列上面,比方邮件MyEmail列,可以运用邮件掩码的花样,详细代码以下:
ALTER TABLE dbo.MyTable ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()') GO
然后查询效果以下:
也可以对多个和列举行掩码
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)') )GOINSERT MySecondTable VALUES ( 'myname@mydomain.com', '1234567890', 100 ) , ( 'abrother@mycorp.com' , '0123456789' , 555) , ( 'somesister@somecompany.org' , '9876543210' , 999)
查询效果以下:
正如我们所看到的,我从差别的行获得差别的掩码,每一个掩码运用于特定行的数据。
许可用户看到掩码实在数据
SQL Server 2016中有一个新的DDM权限。这是UNMASK权限,它和其他任何权限一样被授与。让我们来看看这是怎样事情的。我将建立一个具有与现有用户雷同权限的新用户。然后我将查询该表。
与之前类似的效果,然后我们在给用受权翻开掩码。
如今我们可以看到数据的显现体式格局与特权用户的显现体式格局雷同。关于NewTester用户,一切的数据都是“未屏障的”。
但是,这也有不利的一面。UNMASK权限在数据库范围内授与用户。没有按表或列分别的粒度。假如用户具有UNMASK,他们可以检察存储在数据库中的表中具有SELECT权限的一切数据。我们可以经由过程运用Newtest查询第一个表来看到这一点。
移除掩码
代码以下:
ALTER TABLE dbo.MySecondTable ALTER COLUMN MySSN DROP MASKED;
一旦我如许做,用户将直接看到实在数据。
MySSN列的数据是未屏障的,然则MyEmail和MyID的数据依然是屏障的
总结
动态数据屏障是一个很好的新特征,旨在更轻易地庇护数据不受非特权用户的影响。这可以在数据库中完成,而不须要变动任何运用程序代码,从而许可您以最小的本钱和事情量对运用程序用户屏障敏感数据。我还要提醒您,这并非真正的平安特征。存储在磁盘和表中的数据不会以任何体式格局变动。这依然是纯文本数据,假如用户可以查询体系,他们依然可以潜在地查询您的数据并发明其值。
无论怎样,这个特征关于尤其是须要数据脱密运用的体系来讲无疑是有协助的。固然17今后功用也有了长足的提高背面有时机我会继承引见。
以上就是SQLServer动态掩码的细致引见(代码示例)的细致内容,更多请关注ki4网别的相干文章!