SQLServer有各種加密方式,比如使用加密函數進行數據列加密,Dynamic Data Masking(動態數據屏蔽),但是都達不到數據脫敏的效果,特別是動態數據屏蔽,可以強行繞過加密。而數據脫敏的效果應該是在從生產數據庫遷移數據庫到其它環境時,屏蔽掉敏感數據,而不改變其數據類型。對比Oracle的Data Masking,SQLServer在新版本的Management studio中推出了靜態數據屏蔽的功能。本文就是針對這個功能的詳細介紹。
操作前請先下載SSMS的18.0Preview5版本:鏈接: https://pan.baidu.com/s/1KF5GTcXDOxq456iRlyANFQ 提取碼: n84j
使用場景:
•開發和測試
•分析和業務報告
• 故障排除
•與顧問,研究團隊或任何第三方共享數據庫
工作原理:
靜態數據屏蔽發生在列級別。用戶選擇他們希望屏蔽的列,並且對於所選的每列,他們希望應用哪個屏蔽功能。有幾種掩蔽功能可供選擇,它們在掩蔽函數中有詳細描述。
然后,靜態數據屏蔽將創建數據庫的副本。對於Azure SQL數據庫,通過復制功能執行復制。對於SQL Server,它通過備份操作執行,然后執行還原操作。從那里,對於每列,靜態數據掩蔽開始根據所選擇的掩蔽功能用掩蔽后數據替換預掩蔽數據。
替換在存儲級別完成,因此在靜態數據屏蔽完成后,無法從數據庫的屏蔽副本中檢索預屏蔽數據。
操作步驟:
1. 啟動SSMS,連接到您的數據庫。在左側的“對象資源管理器”窗格中,展開“數據庫”文件夾。右鍵單擊要屏蔽的數據庫,左鍵單擊“任務”,左鍵單擊Mask數據庫...(預覽):
2. 彈出屏蔽配置窗口,它將顯示數據庫中的所有表。 這些表由模式表示,然后在模式中按字母順序排序。
3. 單擊表名附近的下拉圖標以獲取表中所有列的列表,對於表中的每個列,指定列的數據類型以及列是否可為空。可空列是可以接收NULL值作為條目的列。
4. 選擇要屏蔽的所有列以及要應用的屏蔽功能,可用的屏蔽類型是Shuffle masking,Group Shuffle masking,Single value masking,NULL masking,String Composite masking:
注意:大多數這些屏蔽功能都有其他配置參數。對於Shuffle masking,靜態數據屏蔽提供默認參數。對於Group Shuffle掩碼,單值掩碼和String Composite掩碼,用戶必須提供配置參數。要更改或提供配置參數,請單擊“配置...”選項,然后在彈出的對話框中為參數指定(備用)值。
屏蔽配置選項可以即時驗證與配置和模式相關的錯誤和警告。檢測到的任何內容都會顯示為左側的圖標,您可以使用鼠標將鼠標懸停在其上以獲取其他詳細信息。
在下面的示例中,用戶選擇的NULL屏蔽不允許NULL值的列(NOT NULL約束)。
在下面的示例中,用戶選擇的Group Shuffle僅屏蔽一列。由於Group Shuffle需要至少兩列,因此發出警告。
5. 完整的屏蔽配置可以保存到XML文件中供以后使用。雖然Azure SQL數據庫和內部部署數據庫之間的屏蔽功能配置相同,但在保存其他屬性(例如備份文件路徑)方面存在一些細微差別。要保存配置,請單擊“保存配置”,提供文件名,然后單擊“保存”。用戶可以稍后使用Load Config加載現有配置文件。我們建議對具有大量列的表使用配置文件。
6. 靜態數據屏蔽將在用戶的Documents文件夾中創建一個名為Static Data Masking的文件夾,並將日志文件放入其中。日志文件可用於調試目的,日志文件的名稱顯示在配置窗口的底部。
7. (僅限SQL Server)如果在內部部署數據庫上運行靜態數據屏蔽,則靜態數據屏蔽將執行備份/還原操作。在步驟2:克隆.BAK文件位置,提供將存儲備份文件的服務器上的位置。
屏蔽方式介紹:
Null值屏蔽(NULL masking):NULL掩碼用NULL替換列中的所有值。如果列不允許NULL值,則靜態數據屏蔽工具將返回錯誤。
單值屏蔽(Single-value Masking):單值屏蔽使用單個固定值替換列中的所有值,該值由用戶指定。輸入的格式必須可以轉換為所選列的類型,要指定值,請單擊“配置...”,然后提供值,然后單擊“確定”。
洗牌屏蔽(Shuffle Masking):列中的所有值都被拖放到新行,沒有生成新數據,洗牌屏蔽提供了在列中維護NULL條目的選項,為此,請單擊“配置...”,然后選擇“保持NULL位置”框。
組洗牌屏蔽(Group Shuffle Masking):Group Shuffle在一個shuffle組中將幾列綁定在一起。shuffle組中的列將被混合在一起,用戶必須使用Configure ...選項指定shuffle組的名稱。組shuffle發生在同一個表中; 如果在多個表中使用相同的shuffle組名,則兩個組shuffle是獨立的操作。 對於要包含在組中的每個列,組名必須相同。 該名稱區分大小寫。 多個shuffle組(具有不同的名稱)可以在同一個表中發生。
字符串混合屏蔽(String Composite masking):沿模式生成隨機字符串。 它適用於必須遵循預定義模式的字符串才能成為有效條目。 例如,美國社會安全號碼的格式為123-45-6789。 String Composite masking的語法在用戶必須輸入模式的對話框中指定。String Composite masking提供了三個可以通過單擊它們進行測試的示例模式。 如果單擊電話號碼,模式框將自動填充生成隨機美國電話號碼所需的公式。String Composite masking還具有一種高級模式,允許將現有數據的子部分替換為模式生成的字符串。 字符串的替換部分由正則表達式中的捕獲組確定。 例如,可以在保留域的同時替換電子郵件的用戶名部分,或者可以通過保留區域代碼來替換電話號碼。
靜態數據屏蔽具有以下限制:
1. 靜態數據屏蔽不支持具有時態表的數據庫。
2. 靜態數據屏蔽不會屏蔽內存優化表。
3. 靜態數據屏蔽不會屏蔽計算列和標識列。
4. 靜態數據屏蔽不支持Azure SQL超大規模數據庫。
5. 靜態數據屏蔽不支持幾何和地理數據類型。
此外,靜態數據屏蔽在其屏蔽功能方面存在三個限制:
靜態數據屏蔽不會更新直方圖統計信息。因此,一旦完成靜態數據屏蔽,數據庫的屏蔽副本仍可能在直方圖統計中包含敏感數據。考慮運行UPDATE STATISTICS來解決此問題。
如果靜態數據屏蔽返回錯誤,則暫停所有屏蔽操作。數據庫的副本不會被刪除,並且可能包含敏感信息。如果靜態數據屏蔽返回錯誤,則用戶負責刪除數據庫的副本。
(僅限SQL Server)靜態數據屏蔽完成后,數據文件和日志文件仍可能包含未分配內存中的敏感數據位。如果允許訪問數據文件和日志文件,則可以使用十六進制編輯器檢索此敏感數據。
示例:
Test DB: DM_Original
Table: [dbo].[SpecialRole]
1. 使用“單值”模式進行數據屏蔽:
選擇屏蔽功能作為特殊列的“單值”:
將產生一個命名的新數據庫:
特殊列的所有行都由單個值“1”替換:
select top 4 * from [dbo].[SpecialRole]
2. 使用'Shuffle'模式進行數據屏蔽:
選擇屏蔽功能為特殊列的“隨機播放”:
列中的所有值都被打亂拖放到新行:
3. 使用'String Composite'模式進行數據屏蔽:
選擇屏蔽功能為特殊列的“隨機播放”:
編輯模仿樣本的數據格式:
樣本模式:
自定義模式模式:
列中的所有值都替換為隨機數字,字母或符號:
select top 4 * from [dbo].[SpecialRole]
4. 外鍵字段的數據屏蔽:
外鍵字段:IDSystem
Note:
1. 生成數據庫的掩碼副本后,您應手動更新統計信息:
EXEC sp_updatestats;
2.如果靜態數據掩碼返回錯誤,則應放棄此掩碼復制。