網狀架構數據倉儲中的動態數據遮罩

適用於: Microsoft Fabric 中的 SQL 分析端點和倉儲

動態資料遮罩可藉由遮罩處理,使不具權限的使用者無法看見敏感性資料。 它可用來大幅簡化您的應用程式中安全性的設計和編碼。

動態數據遮罩可讓系統管理員指定要顯示多少敏感數據,以最少影響應用層,協助防止未經授權的敏感數據檢視。 動態數據遮罩可以在指定的資料庫欄位上設定,以隱藏查詢結果集中的敏感數據。 使用動態數據遮罩時,資料庫中的數據不會變更,因此可以搭配現有的應用程式使用,因為遮罩規則會套用至查詢結果。 許多應用程式都不需要修改現有查詢,就能遮罩機密資料。

  • 中央資料遮罩原則可直接作用於資料庫中的機密欄位上。
  • 指定無法存取敏感性資料之特殊權限的使用者或角色。
  • 動態數據遮罩功能具有完整遮罩和部分遮罩函式,以及數值數據的隨機遮罩。
  • 簡單的 Transact-SQL 命令可定義及管理遮罩。

動態資料遮罩的目的在於限制敏感性資料的曝光,防止不該存取資料的使用者檢視該資料。 動態資料遮罩的目的不是為了防止資料庫使用者直接連接到資料庫,以及執行會讓敏感性資料片段曝光的全面查詢。

動態數據遮罩與其他網狀架構安全性功能互補,例如數據行層級安全性和數據列層級安全性。 強烈建議一起使用這些數據保護功能,以保護資料庫中的敏感數據。

定義動態資料遮罩

您可以在數據表中的數據行上定義遮罩規則,以模糊化該數據行中的數據。 有五種類型的遮罩可供使用。

函式 描述 範例
預設 請依據指定欄位的資料類型進行完整遮罩。

對於字串資料類型,請使用 XXXX,(或更少) - 如果欄位的大小少於 4 個字元 (charncharvarcharnvarchartextntext)。

對於數值資料類型,請使用零值 (bigintbitdecimalintmoneynumericsmallintsmallmoneytinyintfloatreal)。

對於日期與時間資料類型,請使用 1900-01-01 00:00:00.0000000 (datedatetime2datetimedatetimeoffsetsmalldatetimetime)。

對於二進位資料類型,請使用單一位元組的 ASCII 值 0 (binaryvarbinaryimage)。
範例資料行定義語法: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

替代語法的範例:ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
電子郵件 此遮罩方法會讓電子郵件地址的第一個字母和常數後置詞 ".com" 以形式為電子郵件地址形式來公開。 aXXX@XXXX.com. 範例定義語法: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

替代語法的範例:ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
隨機 此隨機遮罩函數可用在任何數值類型,會以指定範圍內隨機的值遮罩原始值。 範例定義語法: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

替代語法的範例:ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
自訂字串 此遮罩方法會公開第一個及最後一個字母,並在中間新增自訂填補字串。 prefix,[padding],suffix

如果原始的值過短而無法完成整個遮罩,則不會暴露部分的前置詞或後置詞。
範例定義語法: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

替代語法的範例:ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

這會將之類的 555.123.1234 電話號碼變成 5XXXXXXX

其他範例:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

這會將之類的 555.123.1234 電話號碼變成 555.1XXXXXXX

如需更多範例,請參閱 如何在 Synapse 數據倉儲中實作動態數據遮罩。

權限

在工作區上沒有 管理員 istrator、Member 或參與者許可權,且未提高倉儲許可權的使用者會看到遮罩的數據。

您不需要任何特殊許可權,即可建立具有動態數據遮罩的數據表,只有標準和CREATE TABLEALTER架構許可權。

新增、取代或移除數據行的遮罩需要 ALTER ANY MASK 數據表的許可權和 ALTER 許可權。 適當地授 ALTER ANY MASK 與一名保安人員。

具有 SELECT 數據表許可權的使用者可以檢視數據表數據。 定義為遮罩的資料行會顯示幕蔽的資料。 UNMASK將許可權授與使用者,讓他們能夠從定義遮罩的資料行擷取未遮罩的資料。

資料庫 CONTROL 的許可權同時 ALTER ANY MASK 包含 和 UNMASK 許可權,可讓使用者檢視未遮罩的資料。 管理員使用者或角色,例如管理員、成員或參與者,依設計具有資料庫的 CONTROL 許可權,且預設可以檢視未遮罩的資料。 倉儲上提高的許可權包括 CONTROL 許可權。

安全性考慮:使用推斷或暴力密碼破解技術略過遮罩

動態資料遮罩的設計目的是藉由限制應用程式所使用之一組預先定義的查詢中的資料暴露,來簡化應用程式開發。 雖然動態資料遮罩也有助於避免在直接存取資料時意外暴露敏感性資料,但請務必注意,具有查詢許可權的不特殊許可權使用者可以套用技術來取得實際資料的存取權。

例如,假設有足夠許可權的使用者在倉儲上執行查詢,並嘗試「猜測」基礎資料,最後推斷實際值。 假設我們在資料行上 [Employee].[Salary] 定義了遮罩,而此使用者會直接連線到資料庫,並開始猜測值,最後推斷 [Salary] 資料表中的 Employees 值:

SELECT ID, Name, Salary FROM Employees
WHERE Salary > 99999 and Salary < 100001;

結果:

ID 名稱 Salary
62543 Jane Doe 0
91245 John Smith 0

這示範動態資料遮罩不應單獨用來完全保護具有倉儲或 SQL 分析端點查詢存取權的使用者敏感性資料。 它適用于防止敏感性資料暴露,但無法防止惡意意圖推斷基礎資料。

請務必使用 SQL 細微許可權 正確管理物件層級安全性 ,並一律遵循最少的必要許可權原則。

後續步驟