Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
Posted Azure Lei Zhang的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码相关的知识,希望对你有一定的参考价值。
《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\',\'13900000001\'), (\'Er\',\'Wang\',\'4300-0000-0000-0002\',\'erwang@msn.com\',\'13900000002\'), (\'Xiao\',\'Zhang\',\'4300-0000-0000-0003\',\'xiaozhang@msn.com\',\'13900000003\'), (\'Xiao\',\'Li\',\'4300-0000-0000-0004\',\'xiaoli@msn.com\',\'13900000004\'), (\'Xiao\',\'Ming\',\'4300-0000-0000-0005\',\'xiaoming@msn.com\',\'13900000005\')
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字段都被屏蔽了。
这样就能保护客户的用户隐私了。
以上是关于Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码的主要内容,如果未能解决你的问题,请参考以下文章
Azure SQL Database (22) Azure SQL Database支持中文值
Azure SQL Database (26) 使用Query Store对Azure SQL Database监控
Azure SQL Database (22) 迁移部分数据到Azure Stretch Database