SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施

动态数据掩藏(DDM) 是SQL Server 2016 CTP 2.1引入的新功能

 

数据库加密技术本质上改变了数据存储结构,而DDM只是在返回客户端的时候对数据进行隐藏。sysadmin的成员登陆账户 或者 db_owner角色的用户有查看DDM数据的权限。

 

数据库迁移助手评估DDM候选者

 

您的数据库包含需要对终端用户掩藏的数据,但是您并不能确定哪些列为Dynamic Data Masking(DDM)候选者。我们如何确认这些列并实施DDM来保护这些数据?

您可以使用Database Migration Assistant来评估哪些列为DDM的候选者。

第一步是下载最新版本的Database Migration Assistant(DMA)。

DMA的下载地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=53595

DMA是为了取代遗留的SQL Server Upgrade Advisor(SSUA)。

构建SSUA是为了在迁移到SQL Server的新版本之前对数据库进行评估。DMA 同时可以提供评估和执行数据库迁移。评估不仅为了查找迁移中可能存在的问题,同时也是探寻您的数据库使用新功能的机会。

那些新功能就来自于DDM。你可以将DMA指向一个已经存在的数据库,执行评估,获得您应该考虑DDM的列候选者列表。

 

使用SQL Server Data Migration Assistant创建一个评估

 

为了创建一个评估,你首先需要登录DMA。登录DMA后,你创建一个新项目:

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第1张图片

接下来,我们将选择推荐的新功能:

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第2张图片

下一步,我们将连接源服务:

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第3张图片

然后我们选择一个数据库:

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第4张图片

接下来,我们将开始评估。当完成时,将出现三个标签:Performance、Security和Storage。我们将浏览Security标签,展示如下:

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第5张图片

从上图可以观察到,DML返回了DDM和Always Encrypted(AE)的候选列。你应该查看这些列,觉得哪些新功能适合你。

 

为SQL Server列启动DDM

 

一旦你确定了DDM的候选列,您可以开始对其进行掩藏。记住,DDM是一个简单的掩藏过程,而不是加密,在列级别执行。这意味着你必须应用掩码于每个独立的列。掩码在数据库查询结束,返回给客户端时应用。因此DDM对性能的影响保持最小。

因为这些数据已经存储数据库表中,为了应用掩码,我们需要执行ALTER语句。我们将应用掩码于下面的列:

  • [Person].[EmailAddress].[EmailAddress]

  • [Purchasing].[Vendor].[AccountNumber]

有四个可用的掩码函数:Default、Email、Random和 Partial。Default函数将根据数据类型,使用XXXX或者多个0替代原先的数据。Email函数将展示email地址的首个字母并且在结尾加上“.com”,不管email是还是不是 .com 。Random函数应用在数值类型的数据上,将使用特定范围内的随机数替代原来的数值。Partial展示第一个和最后一个字符,并在中间填充定制的字符串。

下面是执行DDM的T-SQL脚本:


USE [AdventureWorks2016CTP3]
GO
ALTER TABLE [Person].[EmailAddress]
ALTER COLUMN [EmailAddress] varchar(50) MASKED WITH (FUNCTION = 'email()');

ALTER TABLE [Purchasing].[Vendor]
ALTER COLUMN [AccountNumber] nvarchar(15) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXXX",1)');

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第6张图片

消息 5074,级别 16,状态 1,第 4 行

索引'IX_EmailAddress_EmailAddress' 依赖于 列'EmailAddress'。

消息 4922,级别 16,状态 9,第 4 行

由于一个或多个对象访问此 列,ALTER TABLE ALTER COLUMN EmailAddress 失败。

解决方案,先删除列依赖对象(这里是索引),执行ALTER TABLE ALTER COLUMN后,在重建依赖对象。

下一步,让我们在实例上创建一个登陆账户,并在数据库AdventureWorks2016CTP3中创建登陆账户的数据库用户,赋予用户对两个表的SELECT权限:


USE [master]
GO
CREATE LOGIN [DDM_User] WITH PASSWORD= 'M$SQLTipsRox27'
GO
USE [AdventureWorks2016CTP3]
GO
CREATE USER [DDM_User] FOR LOGIN [DDM_User]
GO
GRANT SELECT ON [Person].[EmailAddress] TO [DDM_User]
GRANT SELECT ON [Purchasing].[Vendor]  TO [DDM_User]
GO

OK,现在在用户DDM_User上下文中查询表,您将看到掩藏的数据。让我们看看用户期望看到的结果,这个是[Person].[EmailAddress]表的结果:

EXEC AS USER='DDM_User'
GO
SELECT  *
FROM    [Person].[EmailAddress]
REVERT
GO

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第7张图片

下面是[Purchasing].[Vendor]表的查看结果:

EXEC AS USER='DDM_User'
GO
SELECT  *
FROM    [Purchasing].[Vendor]
REVERT
GO

SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施_第8张图片

备注:

您应该知道关于DDM的一些额外的事实:

  • 在数据库恢复时将保留掩码,因为掩码是在表的列上定义的。

  • 掩码并不阻止对表的DUI(Deletes、Updates、Inserts)操作。如果用户有修改它们权限的话,他们仍然可以这样做。

  • 当执行导入导出时,DDM应用于用户,因此用户仅允许提取掩藏后的数据,而不允许查看未掩藏的数据。

  • DDM不能应用于计算列,但如果计算列包含掩藏的列,那么计算列也将被掩藏

最后,DDM不应该被认为是100%牢不可破的。DDM 本意是防止将数据偶然的暴露给没有权限的用户。恶意的操作者可能构建一个蛮力攻击手段,揭示掩藏环境下的信息。

 

DDM不支持的数据类型:

  • (var)binary / image

  • xml

  • sql_variant

  • hierarchyid

  • uniqueidentifier

  • rowversion (timestamp)

  • spatial types

下面是对不支持的数据类型使用DDM 的一个简单例子:

CREATE TABLE TestDDMDataType(a binary,b varbinary,c image,d xml,e sql_variant,f hierarchyid,g uniqueidentifier,h rowversion,i geometry
,k geography)
--增加掩码
ALTER TABLE TestDDMDataType
ALTER COLUMN g uniqueidentifier MASKED WITH(FUNCTION='partial(1,''YYYYYYYYYYY'',1)')
--删除掩码
ALTER TABLE dbo.TestDDMDataType ALTER COLUMN g DROP MASKED;

消息 16003,级别 16,状态 0,第 69 行

列“g”的数据类型不支持数据掩码函数“partial”。

你可能感兴趣的:(SQL,Server,可用性,SQL,Server,安全管理,SQL,Server,数据一致性)