動態數據掩碼(Dynamic Data Masking,DDM)可以防止把敏感數據暴露給未經受權的用戶。DDM做用於數據表的字段上,在查詢結果中隱藏敏感數據列,使用DDM不會修改表中的數據,只是把查詢結果對未經受權的用戶屏蔽,使未受權用戶看到的查詢結果是被屏蔽的,例如,第二列是號碼列,前7個數字被掩碼:sql
動態數據屏蔽在 SQL Server 2016 (13.x) 和 Azure SQL Database中提供,使用 Transact-SQL 命令進行配置。數據庫
對於數據表的列定義屏蔽規則,有4中類型:安全
屏蔽規則的語法:架構
MASKED WITH (FUNCTION = 'default()') MASKED WITH (FUNCTION = 'email()') MASKED WITH (FUNCTION = 'random(start, end)') MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)')
在建立表時定義屏蔽規則:dom
Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL
向現有表添加屏蔽規則:spa
ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()') NULL
控制建立和修改mask的權限,一個用戶只有具備該列的UNMASK 權限,才能夠查看該列的數據。code
1,建立和修改mask的權限server
在使用動態數據屏蔽來建立表時,不需任何特殊權限,只須要具備CREATE TABLE 權限以及對架構的 ALTER 權限。blog
當須要添加、替換或刪除對列的屏蔽時,須要 ALTER ANY MASK 權限以及對錶的 ALTER 權限,能夠將 ALTER ANY MASK 權限授予安全負責人。ip
具備表的 SELECT 權限的用戶能夠查看錶數據,列在被定義爲「已屏蔽」後,將顯示屏蔽後的數據。對於須要從定義了屏蔽的列中檢索被屏蔽數據的用戶,可授予其 UNMASK 權限。
針對數據庫的 CONTROL 權限包括 ALTER ANY MASK 和 UNMASK 權限。
2,更新mask列的權限
在一列上建立mask不會阻止該列上的數據更新,若是用戶有write權限,那麼該用戶即便沒有該列上的UNMASK的權限,也能夠修改該列的數據。應該經過其餘權限來控制用戶對屏蔽列的修改。
3,屏蔽複製
使用 SELECT INTO
或 INSERT INTO ,把數據從一個屏蔽列複製到另外一個表中,這會使得屏蔽數據複製到新表中。
在執行SQL Server Import 和 Export時,也會把屏蔽複製到新的表中。
4,受權查看屏蔽數據
把UNMASK 的權限受權給用戶,那麼該用戶就能夠查看屏蔽列:
GRANT UNMASK TO TestUser; EXECUTE AS USER = 'TestUser'; SELECT * FROM Membership; REVERT; -- Removing the UNMASK permission REVOKE UNMASK TO TestUser;
能夠對屏蔽列進行查詢、增長、修改和刪除操做。
1,查詢屏蔽列
查看數據庫中已經建立的屏蔽列:
SELECT tbl.name AS table_name ,c.name AS column_name ,c.is_masked ,c.masking_function FROM sys.masked_columns AS c INNER JOIN sys.tables AS tbl ON c.[object_id] = tbl.[object_id] WHERE is_masked = 1
2,增長屏蔽列
對現有表增長屏蔽列
ALTER TABLE Membership ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)');
3,修改屏蔽列
對現有的屏蔽列進行修改
ALTER TABLE Membership ALTER COLUMN LastName varchar(100) MASKED WITH (FUNCTION = 'default()');
4,刪除屏蔽列
把列上的屏蔽刪除
ALTER TABLE Membership ALTER COLUMN LastName DROP MASKED;
參考文檔: