Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式。Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分。比如一些像邮件或者工资这样敏感的数据,涉及PII的,我们可以运用这个功能。运用这个功能的步骤,首先先定义一组人(database role)可以拥有看数据的权限,然后GRANT UNMASK权限给这个角色组。微软提供了4种类型的masking给我们选择:default,email,random和custom string。default是字符类型替换为xxxx,数字替换为0,时间变成1990-01-01。email适用于email类型,除了第一个字符、@符号和.com其他的都替换成x。

注意的地方:

1) SELECT INTO、INSERT INTO和用数据库的IMPORT/EXPORT功能会把mask也带入到新生成的表或者目标表里面

2)加了mask的数据在备份好的文件中也是被masked的

3)加了MASK的字段并不能阻止被有更新权限的用户更新

4)兼容模式必须是130(SQL SERVER 2016)

CREATE TABLE dbo.DMMTest
(
strcol1 nvarchar(500) MASKED WITH (FUNCTION = 'default()') NULL,
intcol1 int MASKED WITH (FUNCTION = 'default()') NULL,
dttmcol1 datetime MASKED WITH (FUNCTION = 'default()') NULL,
bincol1 varbinary(100) MASKED WITH (FUNCTION = 'default()') NULL,
emailcol1 nvarchar(200) MASKED WITH (FUNCTION = 'email()') NULL,
randomcol1 int MASKED WITH (FUNCTION = 'random(3,10)') NULL
) insert dbo.DMMTest
(
strcol1,
intcol1,
dttmcol1,
bincol1,
emailcol1,
randomcol1
)
values(
'abcdefghijklmn',
123456789,
getdate(),
0x123456789,
'jerrychen@cjj.com',
123456789
)

如果用一个没有被GRANT UNMASK的用户看到的数据是这样的

查看哪些字段加了mask

SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function
FROM sys.masked_columns AS c
JOIN sys.tables AS tbl
ON c.[object_id] = tbl.[object_id]
WHERE is_masked = 1;

GROUP BY 其实发生在mask之前,也是用真实的数据

结果如下

参考:

Dynamic Data Masking

SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking的更多相关文章

  1. SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表)

    原文:SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表) 作为SQL Server 2016(CTP3.x)的另一 ...

  2. SQL Server 2016新特性:列存储索引新特性

    SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...

  3. SQL Server 2016新特性:DROP IF EXISTS

    原文:SQL Server 2016新特性:DROP IF EXISTS  在我们写T-SQL要删除某个对象(表.存储过程等)时,一般会习惯先用IF语句判断该对象是否存在,然后DROP,比如: 旧 ...

  4. SQL Server 2016 的「動態資料遮罩 (Dynamic Data Masking)」

    一些特別注重資訊安全.個人資料的公司或產業 (如: 金融.保險業),通常「測試用資料庫」的資料,會加上「遮蔽:去識別化」的功能,避免個資外洩.以往必須自己撰寫 SQL 語句或 Stored Proce ...

  5. Microsoft: Get started with Dynamic Data Masking in SQL Server 2016 and Azure SQL

    Dynamic Data Masking (DDM) is a new security feature in Microsoft SQL Server 2016 and Azure SQL DB. ...

  6. Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码

    <Windows Azure Platform 系列文章目录> 我们在使用关系型数据的时候,有时候希望: - 管理员admin,可以查看到所有的数据 - 普通用户,某些敏感字段,比如信用卡 ...

  7. SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Row-Level Security(行级别安全控制)

    SQL Server 2016 CPT3中包含了一个新特性叫Row Level Security(RLS),允许数据库管理员根据业务需要依据客户端执行脚本的一些特性控制客户端能够访问的数据行,比如,我 ...

  8. SQL Server 2016新特性:Live Query Statistics

    SSMS可以提供可以查看正在执行的计划.live query plan可以查看一个查询的执行过程,从一个查询计划操作到另外一个查询计划操作.live query plan提供了整体的查询运行进度和操作 ...

  9. SQL Server 2016新特性:In-Memory OLTP

    存储格式修改 在2014,2016中修改了内存优化表的存储格式,新的格式是序列的并且the database is restarted once during database recovery.   ...

随机推荐

  1. vue开发的一些设置以及技巧

    引入其它css样式   需要加~   @找到的是src目录 对于常用的路径可以设置别名     @代表src                  常用的地址在webpack.base.conf.js中 ...

  2. Spring异常:Annotation-specified bean name.. for bean class ...

    Spring重命名问题.对照项目中的注解,查找@Service是否重重名.由于Spring是在注解下按配置扫描的方式去创建对象的,那么两个重名的注解也就不成立了. 备注,特别注意test包下有没有通过 ...

  3. orcale 之函数

    我们知道存储过程的调用是一条 PL/SQL 语句.那么对于一些表达式我们用什么呢?这里函数的功能就会体现出来了. 函数和过程在创建方式上有很多的类似地方,也是编译后放入内存中以供用户使用,只不过函数调 ...

  4. Unity c#反射查找类中符合条件的方法并执行

    我用在了事件注册上面,再也不用一个一个去写了 下面直接上代码 using System; using System.Collections; using System.Collections.Gene ...

  5. 1、Shell命令行书写规则

    学习目标Shell命令行书写规则 正文对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: ro ...

  6. currentStyle、getComputedStyle 获取样式

    style.height 获取的是行间的样式 currentStyle.height.getComputedStyle(elem,null).height 获取的是 div 的 content 的宽高 ...

  7. jmeter(3)——录制

    其实自己之前做web功能自动化就接触过录制,不管是火狐浏览器的插件录制,还是QTP的录制,可能刚开始接触你会觉得录制很low,不过,时间长了,有时候录制也是很考验人的,更何况,不管是录制还是脚本,只要 ...

  8. 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)

    为什么要codereview . 整个团队的编码风格是统一的. . 有高手能对自己的代码指点一二,从而提高编码水平. . 减少低级错误的出现 . 约束自己写高质量的代码,因为是要给人看的. 我们对co ...

  9. 很小的一个函数执行时间调试器Timer

    对于函数的执行性能(这里主要考虑执行时间,所耗内存暂不考虑),这里写了一个简单的类Timer,用于量化函数执行所耗时间. 整体思路很简单,就是new Date()的时间差值.我仅仅了做了一层简单的封装 ...

  10. 使用OpenSSL(Windows x64版)将pem格式证书转换为p12格式

    今天同事遇到一个问题,他获得的证书只有pem格式,而服务器要求提交p12格式,一时搞不定,来找我帮忙. 我之前也从未接触过证书类型的转换,所以上网大致搜索了一下,又亲自动手试了试,现将有关心得经验记录 ...