SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)

原创 2016年06月02日 09:33:55


       动态数据屏蔽是SQL Server 2016引入的一项新的特性,通过数据屏蔽,你可以对非授权用户限制敏感数据的曝光。动态数据屏蔽会在查询结果集里隐藏指定栏位的敏感数据,而数据库中的实际数据并没有任何变化。动态数据屏蔽很容易应用到现有的应用系统中,因为屏蔽规则是应用在查询结果上,很多应用程序能够在不修改现有查询语句的情况下屏蔽敏感数据。

        动态数据屏蔽是其他SQL Server安全特性(审计、加密、行级别安全控制等)的补充,微软推荐动态数据屏蔽和其他安全特性结合使用,以更好地保护敏感数据。

        屏蔽规则可以在表的某列上定义,以保护该列的数据,有4种屏蔽类型:DefaultEmailCustom StringRandom。在一个列上创建屏蔽不会阻止该列的更新操作;使用SELECT INTOINSERT INTO把数据从屏蔽列复制到另一张表时,会导致屏蔽的数据存放在目标表;对于没有UNMASK权限的用户来讲,动态数据屏蔽用在SQLServer导入/导出时,会导致目标数据库或文件包含屏蔽的数据。屏蔽规则不能应用于Encrypted columns, FILESTREAM, computed column等。


通过下面的SQL,可以查看哪些表的哪些栏位应用了屏蔽功能:

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;


下面看看MSDN给的示例,以此来学习如何使用该功能。

1  创建Dynamix Data Mask
1.1  创建一张表,并定义不同类型的dynamic data masks

CREATE TABLE Membership
  (MemberID int IDENTITY PRIMARY KEY,
   FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,
   LastName varchar(100) NOT NULL,
   Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);

INSERT Membership (FirstName, LastName, Phone#, Email) VALUES 
('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com'),
('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co'),
('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net');
SELECT * FROM Membership;


1.2  创建一个user,并授SELECT权限,该user执行查询,就能看到屏蔽的数据。

CREATE USER TestUser WITHOUT LOGIN;
GRANT SELECT ON Membership TO TestUser;

EXECUTE AS USER = 'TestUser';
SELECT * FROM Membership;
REVERT;


2  在已存在的列上添加或编辑屏蔽功能
2.1  添加屏蔽功能

ALTER TABLE Membership
ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');
2.2  修改屏蔽功能

ALTER TABLE Membership
ALTER COLUMN LastName varchar(100) MASKED WITH (FUNCTION = 'default()');

3  授权查看未屏蔽的数据

GRANT UNMASK TO TestUser;
EXECUTE AS USER = 'TestUser';
SELECT * FROM Membership;
REVERT; 

-- 解除UNMASK权限
REVOKE UNMASK TO TestUser;


4  删除动态数据屏蔽

ALTER TABLE Membership 
ALTER COLUMN LastName DROP MASKED;


找出键盘上当前按下的键

 一、问题的提出  有的程序员希望能够识别所有键盘上按下的键,以便在应用程序中能够正确地处理它。特别希望知道的是用户是否按下了键 SHIFT、CTRL、ALT、NUMLOCK 或 CAPSLOCK。对...
  • ghj1976
  • ghj1976
  • 2000-12-14 10:21:00
  • 3109

SQL Server 查询表的主键外键和被谁引用的表

exec  sp_helpconstraint '表名';
  • sam_jet
  • sam_jet
  • 2014-10-11 11:43:34
  • 3907

ASP.NET Dynamic Data (动态数据)

ASP.NET Dynamic Data ASP.NET动态数据--无代码建站技术
  • eryongyan
  • eryongyan
  • 2013-12-18 17:20:05
  • 1931

数据脱敏 Data Masking

数据脱敏(Data Masking)是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。 1、身份证脱敏 (现...
  • qq575217319
  • qq575217319
  • 2017-08-23 11:40:19
  • 479

Oracle Data Security - Data Masking(数据屏蔽)

Data Masking可对数据进行不可逆的去身份化后,再用于非生产环境,同时自动保留引用完整性,以便应用程序能够继续正常运行。Data Masking Pack与Oracle Enterprise ...
  • pan_tian
  • pan_tian
  • 2013-11-14 17:47:51
  • 6235

data masking

  • 2014年05月05日 00:42
  • 350KB
  • 下载

SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)

动态数据屏蔽是SQL Server 2016引入的一项新的特性,通过数据屏蔽,你可以对非授权用户限制敏感数据的曝光。动态数据屏蔽会在查询结果集里隐藏指定栏位的敏感数据,而数据库中的实际数据并没有任何...
  • Burgess_Liu
  • Burgess_Liu
  • 2016-06-02 09:33:55
  • 1873

数据库安全之数据掩码:SQL新功能之动态数据掩码(SQL2016&AZURE SQL)

动态数据屏蔽 (DDM) 通过对非特权用户屏蔽敏感数据来限制敏感数据的公开。 它可以用于显著简化应用程序中安全性的设计和编码。 动态数据屏蔽允许用户在尽量减少对应用程序层的影响的情况下,指定需要披露的...
  • capsicum29
  • capsicum29
  • 2017-03-05 10:17:14
  • 823

ASP.NET Dynamic Data Part.1(创建动态数据应用程序)

ASP.NET 动态数据让我们能够以少许的努力快速构建以数据为中心的 Web 应用程序。它通过解析数据模型架构中的类型信息填充模板页面,这完全不需要代码或仅需要极少量的代码。15 分钟的工作足以让人获...
  • my98800
  • my98800
  • 2018-01-02 08:54:59
  • 193

JQuery 数据加载中禁止操作页面

比较常见的做法,但对我而言是第一次做,记录一下。 为了把找来的loading.gif 的背景色设置为透明,还特意装了quicktime。 有学到一些额外的东西。       先将div及img...
  • qianliangjiexialing
  • qianliangjiexialing
  • 2016-03-11 14:55:47
  • 1672
收藏助手
不良信息举报
您举报文章:SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)
举报原因:
原因补充:

(最多只允许输入30个字)