《Windows Azure Platform 系列文章目录》
我们在使用关系型数据的时候,有时候希望:
- 管理员admin,可以查看到所有的数据
- 普通用户,某些敏感字段,比如信用卡,电子邮件等字段都是屏蔽的
在这种情况下,就可以使用Dynamic Data Masking动态数据掩码,对数据表的某些字段进行屏蔽。
比如我们对用户的信用卡信息、邮箱地址进行屏蔽,可以起到保护用户隐私的作用。
动态数据屏蔽策略:
1.不对其进行屏蔽的SQL用户:一组可以在 SQL 查询结果中获取非屏蔽数据的 SQL 用户或 AAD 标识。 始终不会对拥有管理员权限的用户进行屏蔽,这些用户可以看到没有任何屏蔽的原始数据。
2.屏蔽规则:一组规则,定义将要屏蔽的指定字段,以及使用的屏蔽函数。 可以使用数据库架构名称、表名称和列名称定义指定的字段。
3.屏蔽函数:一组方法,用于控制不同情况下的数据透露。
屏蔽函数 | 屏蔽逻辑 |
默认 |
根据指定字段的数据类型完全屏蔽 对于字符串数据类型(nchar、ntext、nvarchar),将使用 XXXX;如果字段大小小于 4 个字符,则使用更少的 X。 |
信用卡 |
此屏蔽方法公开指定字段的最后四位数,并添加一个信用卡格式的常量字符串作为前缀。 XXXX-XXXX-XXXX-1234 |
电子邮件 |
此屏蔽方法公开第一个字母并将域替换为 XXX.com,并使用一个电子邮件地址格式的常量字符串作为前缀。 aXX@XXXX.com |
随机数 | 此屏蔽方法根据选定边界和实际数据类型生成随机数。 如果指定的边界相等,则屏蔽函数将是常数。 |
自定义文本 |
此屏蔽方法公开第一个和最后一个字符,并在中间添加一个自定义填充字符串。 如果原始字符串短于公开的前缀和后缀,则只使用填充字符串。 |
准备工作:
1.准备Azure China账户
2.下载Azure SQL Server Management Studio: https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms
1.首先我们登录Azure ARM portal: https://portal.azure.cn
2.创建一个Azure SQL Database,命名为leisqldbsh。
同时创建新的Azure SQL Database Server,创建登录用户名:leizhang
3.创建完毕后,请设置SQL Server的IP白名单。
4.使用SSMS链接这个数据库。在leisqldbsh下,
执行以下T-SQL语句
CREATE TABLE [dbo].[UserInfo](
[unikey] int NOT NULL IDENTITY(1,1),
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[CreditCard] [nvarchar](50) NOT NULL,
[Mail] [nvarchar](50) NOT NULL,
[CellPhone] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
(
[unikey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO INSERT INTO dbo.UserInfo(FirstName,LastName,CreditCard,Mail,CellPhone)
VALUES ('San','Zhang','4300-0000-0000-0001','sanzhang@msn.com',''),
('Er','Wang','4300-0000-0000-0002','erwang@msn.com',''),
('Xiao','Zhang','4300-0000-0000-0003','xiaozhang@msn.com',''),
('Xiao','Li','4300-0000-0000-0004','xiaoli@msn.com',''),
('Xiao','Ming','4300-0000-0000-0005','xiaoming@msn.com','')
5.如果我们以步骤2中创建的用户leizhang,查询UserInfor表,就可以查询到所有的数据。如下图:
6.然后我们需要创建另外一个用户untrusteddev。
在master database下,执行下面的T-SQL命令:
CREATE LOGIN untrusteddev
WITH PASSWORD = 'N0tL0Lc4t5^'
GO CREATE USER untrusteddev
FOR LOGIN untrusteddev
WITH DEFAULT_SCHEMA = [dbo]
GO
7.在leisqldbsh database下,执行下面的T-SQL
CREATE USER untrusteddev
FOR LOGIN untrusteddev
WITH DEFAULT_SCHEMA = [dbo]
GO EXEC sp_addrolemember N'db_datareader', N'untrusteddev'
GO
8.然后查看Dynamic Data Masking,如下图:
点击上图的Add Mask。针对CreditCard字段,增加Mask
针对Mail字段,增加Mask
9.这样我们针对数据表的2个字段的Data Masking都设置好了。
我们回顾一下数据库的链接信息:
Server Name | leisqlserversh.database.chinacloudapi.cn | leisqlserversh.database.secure.chinacloudapi.cn |
Login Name | leizhang | untrusteddev |
Password | 略 | 略 |
说明 | sysadmin | db_datareader |
10.我们以untrusteddev身份,登录Server:leisqlserversh.database.secure.chinacloudapi.cn (注意这个DNS里面有secure信息)
查询表UserInfo,信息如下:
可以看到CreditCard字段和Mail字段都被屏蔽了。
这样就能保护客户的用户隐私了。