有时候啊,当我们存放在数据库里面的数据,需要明文存放,但是对于前台查询出来的,又不太希望明文放出去的时候(比方说客户的手机啊,邮箱啊)之类有点敏感的信息,之前通常是保存个明文,然后在前台展现的时候再特殊处理一下,然后就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. 将richTextBox中的内容写入txt文件发现不换行(解决方法),在richTextBox指定位置插入文字

    string pathname = dt.ToString().Replace(":", ""); string str = richTextBoxResult ...

  2. 【中文分词】简单高效的MMSeg

    最近碰到一个分词匹配需求--给定一个关键词表,作为自定义分词词典,用户query文本分词后,是否有词落入这个自定义词典中?现有的大多数Java系的分词方案基本都支持添加自定义词典,但是却不支持HDFS ...

  3. Moon.Orm 5.0 (MQL版) 实际开发实例Demo

    http://www.cnblogs.com/humble/p/4593133.html  (文章新地址) http://www.cnblogs.com/humble/p/4593133.html  ...

  4. Ionic2学习笔记(8):Local Storage& SQLite

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5557947.html              Ionic2可以有两种方式来存储数据,Local S ...

  5. iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)

    iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器  实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...

  6. php中导入导出excel的原理

    在php中我们要经常导入导出excel文件,方便后台管理.那么php导入和导出excel的原理到底是什么呢?excel分为两大版本excel2007(后缀.xlsx).excel2003(后缀.xls ...

  7. asp.net mvc项目自定义区域

    前言 直接上干货就是,就不废话了. 使用场景:分离模块,多站点等~~ 一.分离模块 自定义视图引擎,设置视图路径格式 项目结构图 1.Code: 在Global.asax Application_St ...

  8. 2个很有趣、耐思考的C语言算法

    1. 输入10个整数,任意相邻的两个数不同,输出所有的递增,递减序列 比如: 输入:1 5 9 8 12 21 3 0 -1 9 输出: 1 5 9 9 8 8 12 21 21 3 0 -1 -1 ...

  9. 《Ext JS模板与组件基本框架图----组件》

    本节主要从七个方面讲解组件,组件时什么,它的作用,它的构架,以及怎么创建和周期还有常见的配置项,属性方法和事件以及其层级是什么都进行整理,希望对大家有帮助. 组件的基础知识.png 2 Abstrac ...

  10. C/C++内存分配

    一.      预备知识—程序的内存分配: 一个由C/C++编译的程序占用的内存分为以下几个部分:1.栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结 ...