SQL Server 2016新特性:动态数据屏蔽(Dynamic Data Masking)
2016-06-02 09:33
549 查看
动态数据屏蔽是SQL
Server 2016引入的一项新的特性,通过数据屏蔽,你可以对非授权用户限制敏感数据的曝光。动态数据屏蔽会在查询结果集里隐藏指定栏位的敏感数据,而数据库中的实际数据并没有任何变化。动态数据屏蔽很容易应用到现有的应用系统中,因为屏蔽规则是应用在查询结果上,很多应用程序能够在不修改现有查询语句的情况下屏蔽敏感数据。
动态数据屏蔽是其他SQL
Server安全特性(审计、加密、行级别安全控制等)的补充,微软推荐动态数据屏蔽和其他安全特性结合使用,以更好地保护敏感数据。
屏蔽规则可以在表的某列上定义,以保护该列的数据,有4种屏蔽类型:Default、Email、Custom
String和Random。在一个列上创建屏蔽不会阻止该列的更新操作;使用SELECT
INTO或INSERT 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;
动态数据屏蔽是SQL
Server 2016引入的一项新的特性,通过数据屏蔽,你可以对非授权用户限制敏感数据的曝光。动态数据屏蔽会在查询结果集里隐藏指定栏位的敏感数据,而数据库中的实际数据并没有任何变化。动态数据屏蔽很容易应用到现有的应用系统中,因为屏蔽规则是应用在查询结果上,很多应用程序能够在不修改现有查询语句的情况下屏蔽敏感数据。
动态数据屏蔽是其他SQL
Server安全特性(审计、加密、行级别安全控制等)的补充,微软推荐动态数据屏蔽和其他安全特性结合使用,以更好地保护敏感数据。
屏蔽规则可以在表的某列上定义,以保护该列的数据,有4种屏蔽类型:Default、Email、Custom
String和Random。在一个列上创建屏蔽不会阻止该列的更新操作;使用SELECT
INTO或INSERT 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;
相关文章推荐
- 在Sql Server 2016中使用For Json子句把数据作为json格式导出
- SQL Server 2016新特性: tempdb增强(Multiple TempDB Files)
- SQL Server 2016新特性: 对JSON的支持
- SQL Server 2016新特性:行级别安全控制(Row-Level Security----RLS)
- 为SharePoint 2016 配置SQL 2016的always on 模式(二)
- SQL Server 2016 AlwaysON 非域部署脚本
- SQL Server 2016新特性:DROP IF EXISTS
- 2017-02-20 Sql Server2016安装后无法找到Microsoft Sql Server Management Studio管理器
- 2017-02-20 安装Sql Server2016+配置Java环境
- SQL基本操作
- MySQL 数据库性能优化之缓存参数优化
- oracle学习(六)--时间日期函数
- 触发器学习笔记(:new,:old用法)
- oracle 正则表达式
- iOS App项目中引入SQLite数据库的教程
- mysql 全文检索 百万条记录的快速检索
- JAVA基础应用——tomcat-redis-session-manager Redis共享Session
- (转)为首次部署MongoDB做好准备:容量计划和监控
- mysql 锁表 for update 引擎/事务