適用於:✅ Microsoft Fabric 中的 SQL 分析端點和倉儲
動態資料遮蔽是一種資料保護功能,透過遮蔽非特權使用者來限制敏感資料的暴露。 它簡化了應用程式中安全設計與編碼。
動態資料遮蔽有助於防止未經授權的敏感資料瀏覽。 管理員會指定要揭露多少敏感資料,對應用層的影響極小。 你可以在指定的資料庫欄位設定動態資料遮蔽,將敏感資料隱藏在查詢的結果集中。 資料庫中的資料不會被更改,因此現有應用程式可以繼續運作,因為查詢結果會套用遮蔽規則。 許多應用程式都不需要修改現有查詢,就能遮罩機密資料。
動態資料遮罩提供以下功能:
- 中央資料遮罩原則可直接作用於資料庫中的機密欄位上。
- 可指定有權限的使用者或角色來存取敏感資料。
- 你有遮罩選項可選:完整遮罩和部分遮罩函數,以及用於數值資料的隨機遮罩。
- 簡單的 Transact-SQL 命令可定義及管理遮罩。
動態資料遮蔽並不妨礙資料庫使用者直接連接資料庫並執行詳盡查詢,揭露敏感資料的部分。 結合動態資料遮蔽與其他 Fabric 安全功能,如欄位層級安全與列級安全,以保護資料庫中的敏感資料。
動態資料遮罩函數
在資料表中的某欄定義遮蔽規則,以混淆該欄的資料。 有四種口罩可供選擇。
| 函數 | 描述 | 範例 |
|---|---|---|
| 預設 | 根據指定欄位的資料類型進行完全遮罩。 對於字串資料類型,請使用 XXXX,(或更少) - 如果欄位的大小少於 4 個字元 (char、nchar、varchar、nvarchar、text、ntext)。對於數值資料類型,請使用零值 (bigint、bit、decimal、int、moneynumericsmallint、smallmoney、tinyint、float、real)。 對於日期與時間資料類型,請使用 1900-01-01 00:00:00.0000000 (date、datetime2、datetime、datetimeoffset、smalldatetime、time)。對於二進位資料類型,請使用單一位元組的 ASCII 值 0 (binary、 varbinary、 image)。 |
範例資料行定義語法: 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。 |
如需更多範例,請參閱 如何在網狀架構數據倉儲中實作動態數據遮罩。
動態資料遮蔽的權限
在 Fabric Data Warehouse 中,如果使用者不是工作區中 Administrator、Member 或 Contributor 角色的成員,或未具備 Warehouse 的較高權限,則在查詢已遮罩的資料行時,會看到遮罩後的資料。
下表列出每種動態資料遮罩操作所需的權限:
| Operation | 必要權限 |
|---|---|
| 建立一個包含遮罩欄位的資料表 |
CREATE TABLE 以及 ALTER 在架構上 |
| 新增、替換或移除欄位上的遮罩 |
ALTER ANY MASK 和 ALTER 在桌上 |
| 查看遮罩資料 |
SELECT 在桌上 |
| 查看未遮罩的資料 |
UNMASK 在資料欄上或 CONTROL 在資料庫上 |
授予 ALTER ANY MASK 給安全主管。 將 UNMASK 授與使用者,讓該使用者能夠從已遮罩的資料行中擷取未遮罩的資料。
資料庫的 CONTROL 權限包含 ALTER ANY MASK 和 UNMASK,因此擁有 CONTROL 的使用者可以查看未遮罩的資料。 管理員、成員或貢獻者等管理員或角色設計上擁有 CONTROL 資料庫權限,預設可查看未遮罩的資料。 Warehouse 的較高層級權限包括 CONTROL 權限。
安全考量:透過推論或暴力破解技術繞過遮蔽
動態資料遮蔽透過限制應用程式使用的一組預設查詢資料暴露,簡化了應用程式開發。 雖然動態資料遮蔽也能防止在直接存取資料時意外暴露敏感資料,但擁有查詢權限的非特權使用者仍可利用技術推斷實際資料。
例如,擁有在倉庫執行查詢權限的使用者可以猜測數值以推斷遮罩資料。 假設你在欄位 [Employee].[Salary] 上定義了一個遮罩。 使用者直接連接資料庫,開始猜測數值,最終推斷出表格中的[Salary]Employees數值。 他們會對 Employees 資料表執行範圍查詢:
SELECT ID, Name, Salary FROM Employees
WHERE Salary > 99999 and Salary < 100001;
查詢結果如下:
| ID | 名稱 | Salary |
|---|---|---|
| 62543 | 無名女屍 | 0 |
| 91245 | 約翰·史密斯 | 0 |
即使欄位 Salary 被遮蔽(數值顯示為 0),該 WHERE 條款確認兩位員工的薪資介於 99,999 至 100,001 美元之間。 不要僅使用動態資料遮蔽來完全保護敏感資料,使其免於遭對 Warehouse 或 SQL 分析端點具有查詢存取權的使用者存取。 動態資料遮蔽適合防止意外的敏感資料外洩,但無法防止惡意推斷底層資料。
妥善管理物件層級安全,使用 SQL 細緻權限,並始終遵守最小權限原則。
相關內容
- Fabric Data Warehouse 中的工作區角色
- Fabric Data Warehouse 中的欄位層級安全性
- Fabric Data Warehouse 中的資料列層級安全性
- Fabric Data Warehouse 中的安全性