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。 • 對於 SQL 變量,將使用當前類型的默認值。 • 對於 XML,將使用文檔 。 • 對於特殊數據類型(timestamp、table、hierarchyid、GUID、binary、image、varbinary 空間類型),將使用空值。 |
信用卡 |
此屏蔽方法公開指定字段的最後四位數,並添加一個信用卡格式的常量字符串作為前綴。 XXXX-XXXX-XXXX-1234 |
電子郵件 |
此屏蔽方法公開第一個字母並將域替換為 XXX.com,並使用一個電子郵件地址格式的常量字符串作為前綴。 [email protected] |
隨機數 | 此屏蔽方法根據選定邊界和實際數據類型生成隨機數。 如果指定的邊界相等,則屏蔽函數將是常數。 |
自定義文本 |
此屏蔽方法公開第一個和最後一個字符,並在中間添加一個自定義填充字符串。 如果原始字符串短於公開的前綴和後綴,則只使用填充字符串。 |
準備工作:
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‘,‘[email protected]‘,‘13900000001‘), (‘Er‘,‘Wang‘,‘4300-0000-0000-0002‘,‘[email protected]‘,‘13900000002‘), (‘Xiao‘,‘Zhang‘,‘4300-0000-0000-0003‘,‘[email protected]‘,‘13900000003‘), (‘Xiao‘,‘Li‘,‘4300-0000-0000-0004‘,‘[email protected]‘,‘13900000004‘), (‘Xiao‘,‘Ming‘,‘4300-0000-0000-0005‘,‘[email protected]‘,‘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動態數據掩碼