1. 程式人生 > >Azure SQL Database (23) Azure SQL Database Dynamic Data Masking動態數據掩碼

Azure SQL Database (23) Azure SQL Database Dynamic Data Masking動態數據掩碼

row ext 如果 word ins datetime skin read 工作

  《Windows Azure Platform 系列文章目錄》

  我們在使用關系型數據的時候,有時候希望:

  -  管理員admin,可以查看到所有的數據

  -  普通用戶,某些敏感字段,比如信用卡,電子郵件等字段都是屏蔽的

  在這種情況下,就可以使用Dynamic Data Masking動態數據掩碼,對數據表的某些字段進行屏蔽。

  比如我們對用戶的信用卡信息、郵箱地址進行屏蔽,可以起到保護用戶隱私的作用。

  動態數據屏蔽策略:

  1.不對其進行屏蔽的SQL用戶:一組可以在 SQL 查詢結果中獲取非屏蔽數據的 SQL 用戶或 AAD 標識。 始終不會對擁有管理員權限的用戶進行屏蔽,這些用戶可以看到沒有任何屏蔽的原始數據。

  2.屏蔽規則:一組規則,定義將要屏蔽的指定字段,以及使用的屏蔽函數。 可以使用數據庫架構名稱、表名稱和列名稱定義指定的字段。

  3.屏蔽函數:一組方法,用於控制不同情況下的數據透露。

屏蔽函數 屏蔽邏輯
默認

根據指定字段的數據類型完全屏蔽

對於字符串數據類型(nchar、ntext、nvarchar),將使用 XXXX;如果字段大小小於 4 個字符,則使用更少的 X。
• 對於數字數據類型(bigint、bit、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real),將使用零值。

對於日期/時間數據類型(date、datetime2、datetime、datetimeoffset、smalldatetime、time),將使用 1900-01-01。
• 對於 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 Ndb_datareader, Nuntrusteddev
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動態數據掩碼