有时候啊,当我们存放在数据库里面的数据,需要明文存放,但是对于前台查询出来的,又不太希望明文放出去的时候(比方说客户的手机啊,邮箱啊)之类有点敏感的信息,之前通常是保存个明文,然后在前台展现的时候再特殊处理一下,然后就ok了。

而现在呢,在2016提供了data mask的功能,可以遮掩对应列的一些基础信息

事不宜迟,先做样例

 1 create table t2(ID int identity,Name nvarchar(50),PWD varchar(20),Phone varchar(50),Email varchar(200))
2
3 go
4 insert into t2 (Name ,PWD ,Phone ,Email )
5 select '张三','zhangsan','12433281924','zhangsan@qq.com'
6 union all
7 select '李四','wojiaolisi','18734612309','lisi@sohu.com'
8 union all
9 select '王五','wangwu','15378198234','wangwu@21cn.com'
10 union all
11 select 'sixgod','godsixzhao','00834123642','sixgod@qq.com'
12
13 select * from t2
14
15 ID Name PWD Phone Email
16 ----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
17 1 张三 zhangsan 12433281924 zhangsan@qq.com
18 2 李四 wojiaolisi 18734612309 lisi@sohu.com
19 3 王五 wangwu 15378198234 wangwu@21cn.com
20 4 sixgod godsixzhao 00834123642 sixgod@qq.com

测试表搭建

然后我们对这个表的某个列进行mask 的操作。比方说我们对密码进行一个mask 可以使用以下语句

alter table t2 alter column PWD add masked with (function='default()')

然后我创建来一个用户Test1 然后只对他授予一个查询的权限。运行如下

execute as login='Test1'

select * from t2

ID          Name                                               PWD                  Phone                                              Email
----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 张三 xxxx 12433281924 zhangsan@qq.com
2 李四 xxxx 18734612309 lisi@sohu.com
3 王五 xxxx 15378198234 wangwu@21cn.com
4 sixgod xxxx 00834123642 sixgod@qq.com

默认的方法,是将整个列的替换成XXXX来显示。(仅仅在查询的时候会变成这样,数据并没有真正修改成 XXXX)。这是一种mask 的方法。

2016提供给了4种mask 的方式,上面已经演示来一种,还有3种分别是 email(),ramdom(),Custom masking 这3种,下面就演示一下

alter table t2 alter column Email add masked with (function='Email()')
alter table t2 alter column ID add masked with (function='Random(1000,9999)')
alter table t2 alter column Phone add masked with (function='partial(4,"****",4)') select * from t2 ID Name PWD Phone Email
----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7952 张三 xxxx 1243****1924 zXXX@XXXX.com
7601 李四 xxxx 1873****2309 lXXX@XXXX.com
5583 王五 xxxx 1537****8234 wXXX@XXXX.com
3190 sixgod xxxx 0083****3642 sXXX@XXXX.com

2、Email() 这个函数只显示email 的第一位以及 @,其他全部使用X来Mask
3、Random(1000,9999) 显示的值从1000~9999 之间生成的随机整数进行mask

4、partial 相当于自定义mask 模式,格式 (前缀保留位数,mask串,后缀保留位数) 这个格式进行创建

那是不是加来mask之后就无法看到原始数据呢?并不是的,是需要使用权限进行控制

grant unmask to User
revoke unmask from User

只要有unmask这个权限,那么就可以看到原始数据啦~~~
PS:可以查看那些列有mask 的哦

select object_name(object_id),name,masking_function
from sys.masked_columns (无列名) name masking_function
t2 ID random(1000, 9999)
t2 PWD default()
t2 Phone partial(4, "****", 4)
t2 Email email()

sql server 里面的 dynamic Data Masking的更多相关文章

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

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

  2. SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking

    Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式.Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分.比如一 ...

  3. 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. ...

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

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

  5. SQL Server里一些未公开的扩展存储过程

    SQL Server里一些未公开的扩展存储过程 [转帖] 博客天地 www.inbaidu.com SQL Server里一些未公开的扩展存储过程 扩展存储过程(xp)是直接运行在SQL Server ...

  6. Use Dynamic Data Masking to obfuscate your sensitive data

    Data privacy is a major concern today for any organization that manages sensitive data or personally ...

  7. SQL Server里在文件组间如何移动数据?

    平常我不知道被问了几次这样的问题:“SQL  Server里在文件组间如何移动数据?“你意识到这个问题:你只有一个主文件组的默认配置,后来围观了“SQL Server里的文件和文件组”后,你知道,有多 ...

  8. SQL Server里的文件和文件组

    在今天的文章里,我想谈下SQL Server里非常重要的话题:SQL Server如何处理文件的文件组.当你用CREATE DATABASE命令创建一个简单的数据库时,SQL Server为你创建2个 ...

  9. SQL Server里的闩锁介绍

    在今天的文章里我想谈下SQL Server使用的更高级的,轻量级的同步对象:闩锁(Latch).闩锁是SQL Server存储引擎使用轻量级同步对象,用来保护多线程访问内存内结构.文章的第1部分我会介 ...

随机推荐

  1. Hibernate之HQL添加过滤器查询的用法

    HQL查询过程中支持添加过滤器.使用步骤是这样的: 首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的< ...

  2. android中ProgressBar和ListView

    ProgressBar进度条的使用情况: 进度条的.xml声明:如果不声明格式,则默认格式为转圆圈的形式,声明进度条的visibility为不可见. <ProgressBar android:i ...

  3. 轻松搞定Win8 IIS支持SVC 从而实现IIS寄宿WCF服务

    写在前面 为了尝试在IIS中寄宿WCF服务,需要配置IIS支持SVC命令,于是便有了在DOS命令中用到ServiceModelReg.exe注册svc命令. 坑爹的是注册成功后就开始报错.无奈之下两次 ...

  4. js构建ui的统一异常处理方案(一)

    从早期从事基于java的服务器端开发,再到之后从事基于web和js的ui开发,总体感觉基于web页面的ui开发远不如服务器端健壮.主要是早期ie浏览器功能太弱小,很多业务被迫放到服务器端去实现,浏览器 ...

  5. JavaScript中的数据类型转换

    本文中提到的“原始值”指的是undefined,null,Boolean,string和number. 本文中的对象是native对象,宿主对象(浏览器定义的对象)按照各自的算法转换. JavaScr ...

  6. linux源码分析(二)-启动过程

    前置:这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记. ...

  7. ASP.NET多种不同页面间数据传递的方法

    1. Get(即使用QueryString显式传递)     方式:在url后面跟参数.     特点:简单.方便.     缺点:字符串长度最长为255个字符:数据泄漏在url中.     适用数据 ...

  8. What does "size" in int(size) of MySQL mean?

    What does "size" in int(size) of MySQL mean? https://alexander.kirk.at/2007/08/24/what-doe ...

  9. win10平台mysql5.6.34免安装版(绿色版zip)的配置以及密码和编码设置

    平台:win10 X64 mysql: mysql-5.6.34-winx64.zip 以下所写都是本人测试过的,力争无误.上次发布了,可是发现了一些问题,特地查了一下官方文档(我会说我是用有道词典翻 ...

  10. Java中,关于字符串类型、随机验证码、 时间类型

    一.字符串类型:String类型 定义一个字符串 String a="Hello World"; String b= new String ("Hello World&q ...