共用方式為


Fabric 資料倉儲中的動態資料遮罩

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

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

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

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

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

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

定義動態資料遮罩

您可以在資料庫中的資料行定義遮罩規則,以模糊該資料行中的資料。 遮罩有四種類型可供選擇。

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

對於字串資料類型,請使用 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

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

權限

工作區中沒有系統管理員、成員或參與者權限的使用者以及在倉儲中沒有提升權限的使用者都將看到遮罩資料。

建立具有動態資料遮罩的資料表不需要任何特殊權限,只需要標準 CREATE TABLEALTER 結構描述權限。

新增、取代或移除資料行遮罩需要資料表的 ALTER ANY MASK 權限和 ALTER 權限。 將 ALTER ANY MASK 授與資訊安全人員是適當作法。

具有資料表 SELECT 權限的使用者可以檢視資料表資料。 定義為已遮罩的資料行會顯示遮罩的資料。 請將 UNMASK 權限授與使用者,使其能夠從已定義遮罩的資料行擷取未遮罩的資料。

資料庫 CONTROL 的權限同時包含 ALTER ANY MASKUNMASK 權限,可讓使用者檢視未遮罩的資料。 系統管理使用者或角色 (例如管理員、成員或參與者) 按設計具有資料庫的 CONTROL 權限,而且預設可以檢視未遮罩的資料。 倉儲的提升權限包括 CONTROL 權限。

安全性考量:使用推斷或暴力破解方法略過遮罩

動態資料遮罩的設計是要藉由限制應用程式所使用之預先定義查詢集的資料曝光,簡化應用程式開發。 雖然動態資料遮罩也可以用來避免在直接存取資料時意外洩露機密資料,您必須特別注意具有查詢權限的無特殊權限使用者,可以套用技術以存取實際的資料。

例如,請考慮使用者具有足夠的權限對倉儲執行查詢,並嘗試猜測基礎資料,最終推斷實際的值。 假設我們在 [Employee].[Salary] 資料行上定義了遮罩,而這位使用者直接連接到資料庫並開始猜測值,最後推斷出 Employees 資料表中的 [Salary] 值:

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

產生結果:

識別碼 名稱 Salary
62543 Jane Doe 0
91245 John Smith 0

這表面不應單獨使用動態資料遮罩來完全保護對倉儲或 SQL 分析端點具有查詢存取權的使用者的敏感資料。 它適用於防止機密資料不慎洩露,但無法防止惡意推斷基礎資料。

請務必使用 SQL 精細權限適當管理物件層級安全性,並始終遵守最低所需權限準則。

後續步驟