資料行 mask
子句
適用於:Databricks SQL Databricks Runtime 12.2 LTS 和更新版本 僅限 Unity Catalog
指定每當從資料表擷取資料列時,就會套用至資料行的函式。 該資料行的所有後續查詢都會收到針對資料行中該函式的評估結果,而不是該資料行的原始值。 這適用於更細緻的存取控制,其中函式可以檢查叫用使用者的身分識別或群組成員資格,以確定是否要修訂該值。
您可以在下列情況下新增資料行遮罩:
- 使用 CREATE TABLE 建立資料表。
- 使用 ALTER TABLE … ADD COLUMN 將資料行新增至資料表。
- 使用 ALTER TABLE … ALTER COLUMN 改變資料列。
重要
一旦從資料來源擷取每個資料列,就會套用遮罩。 遮罩之後會套用任何運算式、述詞或排序。 例如,遮罩資料行與另一個資料表中的另一個資料行之間的聯結將會使用遮罩值來進行聯結比較。
如需有關如何使用資料行遮罩的詳細資訊,請參閱使用資料列篩選和資料行遮罩篩選敏感資料表資料。
語法
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
參數
-
至少有一個參數的純量 SQL UDF。
SQL UDF 的第一個參數與遮罩的資料行 1:1 對應。 遮罩的資料行類型必須可轉換成 SQL UDF 參數類型。 如果
func_name
需要更多參數,USING COLUMNS
子句必須提供引數。函式的傳回類型必須可轉換成遮罩資料行的資料類型。
-
選擇性地指定要傳遞至
func_name
之遮罩資料行資料表的其他資料行。 每個other_column_name
都必須可轉換成func_name
的對應參數。使用資料行遮罩,根據對
table_name
、column_identifier
的值和可選的other_column
執行查詢的使用者,選擇性地匿名化column_identifier
的值。 constant_literal
指定類型與函式參數相符的常數參數。 支援下列類型:
STRING
、數值 (INTEGER
、FLOAT,
、DOUBLE
、DECIMAL
…)、BOOLEAN
、INTERVAL
、NULL
。
範例
可以在使用資料列篩選和資料行遮罩篩選敏感資料表資料中找到更多範例。
-- Create a table with a masked column
> CREATE FUNCTION mask_ssn(ssn STRING) RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
> CREATE TABLE persons(name STRING, ssn STRING MASK mask_ssn);
> INSERT INTO persons VALUES('James', '123-45-6789';
-- As a non-member of 'HumanResourceDept'
> SELECT * FROM persons;
James ***-**-****
-- As a member of 'HumanResourceDept'
> SELECT * FROM persons;
James 123-45-6789
-- Create a masking function with multiple parameters. When applied first parameter will be the column that masking function applies to
> CREATE FUNCTION mask_pii_regional(value STRING, region STRING)
RETURN IF(is_account_group_member(region || '_HumanResourceDept'), value, 'REDACTED');
-- Create a table with a masked column. Masking function first parameter will be the column that is masked.
-- The rest of the parameters should be specified in `USING COLUMNS (<columnList>)` clause
> CREATE TABLE persons(name STRING, address STRING MASK mask_pii_regional USING COLUMNS (region), region STRING);
> INSERT INTO persons('James', '160 Spear St, San Francisco', 'US')
-- As a non-member of 'US_HumanResourceDept'
> SELECT * FROM persons;
James | REDACTED | US
-- As a member of 'US_HumanResourceDept'
> SELECT * FROM persons;
James | 160 Spear St, San Francisco | US