介绍

动态数据掩码(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

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

我们可以看到第一列包含掩码数据。只有x出现在数据的位置。这就实现了我想要的,即对非特权用户隐藏数据。注意,磁盘上的数据没有更改。数据只有在返回给非特权用户时才会被屏蔽。

我可以在执行计划的最后一部分看到这种情况。我需要授予用户查看计划的权限,但是当我这样做时,我看到的是用户的计划,使用的是上面相同的查询。

.

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

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

ALTER TABLE dbo.MyTable

ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')

GO

然后查询结果如下:

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

CREATE TABLEMySecondTable (

MyEmailVARCHAR( 250) MASKED WITH (FUNCTION= 'email()')

, MySSNVARCHAR (10) MASKED WITH (FUNCTION ='default()')

, MyIDINT MASKED WITH (FUNCTION ='random(1,4)')

)GO

INSERTMySecondTableVALUES('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以后功能也有了长足的进步后面有机会我会继续介绍。

mysql字段掩码_SQL Server 动态掩码相关推荐

  1. 巨杉mysql支持临时表_sql server用变量动态命名临时表表名

    sql server不支持动态命名临时表的表名,如以下语句并不能创建临时表: declare @n nvarchar(10),@s nvarchar(100) set @n = 'temp' set ...

  2. mysql如果存在字段删除_Sql Server 添加删除字段判断表或字段是否存在得到

    增加字段 alter table docdsp add dspcode char(200) 删除字段 ALTER TABLE table_NAME DROP COLUMN column_NAME 修改 ...

  3. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare(转)

    sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪. sql server中变量要先申明后赋值: 局部变量用 ...

  4. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare

    sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪. sql server中变量要先申明后赋值: 局部变量用 ...

  5. mysql 时间粒度_SQL Server时间粒度系列----第2节日期、周时间粒度详解

    从MySQL提供的TO_DAYS和FROM_DAYS针对函数说起 学习和使用过MySQL的博友,大都知道MySQL提供了很多针对日期和时间的函数,提供了获取不同时间粒度上的功能.相对而然SQL Ser ...

  6. sql server和mysql分页查询_sql server和mysql中分别实现分页功能

    MySQL 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录, 例如: select * from tablename limit m, n sql="select * ...

  7. sql server转mysql工具下载_SQL Server转换为MySQL工具推荐(Mss2sql)

    SQL Server转换为MySQL工具,用了一下 感觉蛮不错的. 分享上来,同时也以便记录下来以后自用. 工具名称:Mss2sql 来个操作流程: 1.首先下载工具 用户名与密码都是www.linu ...

  8. 批量比对 mysql 字段_MS SQL Server数据库两个库之间相同数据表名内容批量对比方法...

    上一篇"导出记录数量对比-软件测试方法(一)",主要介绍数据导出结果记录数量和原始正常好库的记录数量精确对比,测试软件导出少数据的相关bug. 本文测试方法旨在更精确比对表记录内部 ...

  9. server2008 mysql数据库病毒_SQL Server数据库mdf文件中了勒索病毒*.mdf.[decrypt@files.mn].ROGER...

    常见的扩展名如下: mdf.[decrypt@files.mn].ROGER mdf.id-F047696E.[3441546223@qq.com].ncov mdf.[zikont@uthki.co ...

最新文章

  1. Docker(四):Docker 命令大全
  2. 使用MQTT.fx接入阿里云物联网平台
  3. 33_向路由组件传递数据
  4. ubuntu16.04 安装python3.6
  5. BZOJ 1034: [ZJOI2008]泡泡堂BNB
  6. HDU 2686 MCMF
  7. js 获取浏览器高度、浏览器宽度
  8. CodeIgniter入门
  9. Python——数字排列组合
  10. Oracle基础梳理之TO_CHAR()-No5
  11. 涉密计算机分区保护,VeraCrypt - 创建加密分区保护计算机上需要保密的文件
  12. JPO Summary
  13. 在excel图表上添加数据标签
  14. element UI和阿里图标图iconfont冲突怎么办
  15. #3. 复读机(LibreOJ)
  16. 2007年世界奇异新闻写真录
  17. Java I/O (输入/输出)
  18. Linux一些基本操作(一)
  19. ASP.NET网络映射驱动器无权限访问的解决方案
  20. FPGA _Verilog HDL_8选一多路选择器设计

热门文章

  1. 取球问题(谁嬴谁输)
  2. android 步骤指示器实现
  3. TheWorld 世界之窗浏览器 1.1RC7版
  4. 妄想性仮想人格障害 汉化版第5关密码问题
  5. bwt比对算法 C语言,BWT以及BWTS算法的一点总结及看法
  6. 前端企业微信服务商第三方应用开发详情流程2021-4-9
  7. 关于Ubuntu下Komodo如何运行
  8. android 一键锁屏和清除手机数据
  9. 通过JavaScript自由切换iframe
  10. 深圳月薪两万属于什么水平?