一些特別注重資訊安全、個人資料的公司或產業 (如: 金融、保險業),通常「測試用資料庫」的資料,會加上「遮蔽;去識別化」的功能,避免個資外洩。以往必須自己撰寫 SQL 語句或 Stored Procedure 來處理,且遇到不同的資料庫使用者,要給予不同瀏覽權限時,寫起來就更麻煩。現在 SQL Server 2016 已內建「動態資料遮罩 (Dynamic Data Masking)」功能,除了資料可針對自訂邏輯來遮蔽,還可針對不同的資料庫使用者,給予不同的瀏覽權限。

 --建立測試資料表
CREATE TABLE Employee(
EmpNo int identity primary key,
[Name] nvarchar(5),
ID varchar(10),
Hireday date,
Birthday date,
Age as datediff(year,Birthday,getdate())+1,
Gender bit,
Email varchar(50),
Tel varchar(20),
Salary money,
CreditCard varchar(20)) --新增測試資料
INSERT Employee
VALUES (N'王二','A123456789','','',0,'aaa@wizard.com','02-12345678',100500,'1234-5678-9012-3456')
,(N'李二三','B123456789','','',1,'bbb@wizard.com','03-12345678',88000,'7890-1234-5678-9012')
,(N'陳二三四','C123456789','','',1,'ccc@wizard.com','04-12345678',723456,'3456-7890-1234-5678')

建立測試資料

 --測試 default 遮罩,在 varchar 型別
ALTER TABLE Employee ALTER COLUMN Tel ADD MASKED WITH(FUNCTION='default()')
GO
--測試 default 遮罩,在 bit 型別 (bit會全為零)
ALTER TABLE Employee ALTER COLUMN Gender ADD MASKED WITH(FUNCTION='default()')
GO
--測試 default 遮罩,在 money 型別
ALTER TABLE Employee ALTER COLUMN Salary ADD MASKED WITH(FUNCTION='default()')
GO
--測試 default 遮罩,在 date 型別
ALTER TABLE Employee ALTER COLUMN Hireday ADD MASKED WITH(FUNCTION='default()')
GO
--測試 email 遮罩,在 varchar 型別
ALTER TABLE Employee ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
 --建立一般使用者 user1
CREATE USER user1 WITHOUT LOGIN
GRANT SELECT ON Employee TO user1 --以 sa (最高權限者) 瀏覽 (無遮罩)
SELECT * FROM Employee (NOLOCK); --以 user1 瀏覽 (有遮罩)
EXEC AS USER='user1'
SELECT * FROM Employee (NOLOCK);
REVERT


圖 1 使用者 sa 和 user1 看到的結果,前者無遮罩,後者有遮罩

--------------------------------------------

 --測試自訂遮罩
ALTER TABLE Employee ALTER COLUMN [Name] ADD MASKED WITH (FUNCTION = 'partial(1,"X",1)') --Name 保留第一個和最後一個字,其他用 X 取代
ALTER TABLE Employee ALTER COLUMN CreditCard ADD MASKED WITH (FUNCTION = 'partial(0,"xxxx-xxxx-xxxx-",4)') --信用卡,只顯示最後四碼
ALTER TABLE Employee ALTER COLUMN ID ADD MASKED WITH (FUNCTION = 'partial(2,"________",0)') --ID 保留前兩個字,其他用 8 個底線符號取代 --測試亂數遮罩
ALTER TABLE Employee ALTER COLUMN Salary ADD MASKED WITH(FUNCTION = 'random(10000,100000)') --Salary 顯示介於 10000 到 100000 的亂數


圖 2 使用者 sa 和 user1 看到的結果,前者無遮罩,後者有遮罩

--------------------------------------------

--查詢有啟用 Dynamic Data Masking 功能的資料表和欄位

SELECT m.name, t.name, c.user_type_id, m.is_masked, m.masking_function
FROM sys.masked_columns (NOLOCK) m
JOIN sys.tables (NOLOCK) t ON m.[object_id]=t.[object_id]
JOIN sys.columns (NOLOCK) c ON m.[object_id]=c.[object_id] AND m.name=c.name
WHERE m.is_masked=1;

--------------------------------------------

--希望某個使用者 user2 瀏覽時,不受遮罩影響
GRANT UNMASK TO user2

--------------------------------------------

--針對某個資料表或欄位,移除 Dynamic Data Masking 功能
ALTER TABLE Employee ALTER COLUMN CreditCard DROP MASKED

--測試是否已移除 Dynamic Data Masking 功能
exec('SELECT * FROM Employee (NOLOCK)') as user='user1'

--------------------------------------------
--------------------------------------------
參考書籍:

[1] Microsoft SQL Server 2016 資訊安全實戰, ch6, 悅知出版社
http://www.delightpress.com.tw/book.aspx?book_id=SKUD00027
--------------------------------------------
相關文章:

[1] 動態資料遮罩
https://msdn.microsoft.com/zh-tw/library/mt130841.aspx

[2] SQL2016-動態資料遮罩
https://dotblogs-testslot.azurewebsites.net/ricochen/2016/12/02/222254

[3] sql server 里面的 dynamic Data Masking
http://www.cnblogs.com/Gin-23333/p/5412028.html

[4] Dynamic Data Masking筆記(SQL Server 2016新功能)
https://dotblogs.com.tw/stanley14/2016/03/19/090752

[5] CP2-新功能-Dynamic Data Masking
https://dotblogs.com.tw/colinlin/2015/06/16/151581

[6] SQL Server 2016 Security Roadmap Session Notes
https://www.brentozar.com/archive/2015/05/sql-server-2016-security-roadmap-session-notes-msignite/
--------------------------------------------
--------------------------------------------

SQL Server 2016 的「動態資料遮罩 (Dynamic Data Masking)」的更多相关文章

  1. 微软发布正式版SQL Server 2016

    微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...

  2. SQL Server 2016白皮书

    随着SQL Server 2016正式版发布日临近,相关主要特性通过以下预览学习: Introducing Microsoft SQL Server 2016 e-bookSQL Server 201 ...

  3. Sql Server 2016新功能之 Row-Level Security

    Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...

  4. SQL Server 2016正式版安装(超多图)

    微软数据库SQL Server 2016正式版在2016年6月就发布,由于近期工作忙,一直拖到现在才有时间把安装过程写到博客上,分享给大家.本人一直习惯使用英文版,所以版本和截图都是英文版的.废话少说 ...

  5. SQL Server 2016 RC0 安装(超多图)

    微软最新版本的数据库SQL Server 2016在2016年3月9日推出了RC0版本.已经提供了包括简体中文等多种语言版本,不过联机丛书还是英文版的.对OS的要求是WIN8,WIN10, WIN20 ...

  6. [资料分享]SQL Server 2016/2014/2012/2008简体中文企业版下载+对应补丁

    为什么只提供企业版下载呢?因为不管你是学生还是工作研究人员,企业版都是功能最为齐全的一个版本,比如企业版都集成了SQL Server Management Studio管理界面(俗称企业管理器的可视化 ...

  7. SQL Server 2016中In-Memory OLTP继CTP3之后的新改进

    SQL Server 2016中In-Memory OLTP继CTP3之后的新改进 转译自:https://blogs.msdn.microsoft.com/sqlserverstorageengin ...

  8. SQL Server 2016五大优势挖掘企业用户数据价值

    SQL Server 2016五大优势挖掘企业用户数据价值 转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月1 ...

  9. SQL Server 2016 CTP2.3 的关键特性

    SQL Server 2016 CTP2.3 的关键特性 数据库方面的增强 Row Level Security已经支持In-memory OLTP 表.用户现在可以对内存优化表实施row-level ...

随机推荐

  1. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

  2. 小贴士——提高PHP程序在NGINX代理服务器的性能

    NGINX本身就是面向最大性能的代理服务器,因此在使用NGINX,并没有性能调整的配置工作.但是却有很多选项可用于定制NGINX的行为,利用底层硬件和操作系统. 下面将介绍用于提供PHP在NGINX的 ...

  3. <图形图像,动画,多媒体> 读书笔记 --- 力学行为特性

    UIKit力学行为包括了:重力(UIGravityBehavior),碰撞(UICollisionBehavior),吸附(UIAttachmentBehavior),推(UIPushBehavior ...

  4. 如何优雅的研究 RGSS3 (七) 加入LOGO屏幕

    对于游戏 LOGO 屏幕. 首先设计 LOGO Scene类.我们知道,现场类 Scene_Base 子类. 让我们回顾一下现场的作品. 首先运行开始处理.其次是开始治疗.然后停止更新屏幕,最后,治疗 ...

  5. 一些小bug

    1.ie6-ie8中是不支持的,需要加上下面这句话: filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);   2.去除虚线框 a  ...

  6. 自己写RTPserver——大约RTP协议

    自己写RTPserver--大约RTP协议 本文将带领你一步一步地实现一个简单的手RTP变速器server,旨在了解RTP流媒体传输协议以及有关多媒体编解码器的一些知识. RTP协议的必备知识 要动手 ...

  7. INSTEAD OF触发器

    Oracle触发器5(INSTEAD OF触发器) 前提:对于简单的视图,可以直接进行DML操作,但是对于复杂视图,不允许直接执行DML操作,当视图符合以下任何一种情况都不可以: 具有集合操作符(UN ...

  8. NET开发面向对象2

    面向对象 (2) 继续上一篇<ASP.NET开发,从二层至三层,至面向对象>http://www.cnblogs.com/insus/p/3822624.html .我们了解到怎样把自己的 ...

  9. maven 启蒙

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.为了替代ANT的Apache开源项目.现在的项目越来越大.ANT已经不适用了. 1.部署m ...

  10. SOLID 设计原则 In C# 代码实现

    [S] Single Responsibility Principle (单一职责原则) 认为一个对象应该仅只有一个单一的职责 namespace SingleResponsibilityPrinci ...