共用方式為


欄位 mask 子句

適用於:核取記號為「是」Databricks SQL 核取記號為「是」 Databricks Runtime 12.2 LTS 和更新版本 核取記號為「是」 僅限 Unity Catalog

指定一個函式,每當從資料表擷取資料列時,套用至該欄。 該列的所有後續查詢都會接收將該函式應用於該列所得到的結果,取代該列的原始值。 這對於細緻的存取控制很有用,功能可以檢查叫用使用者的身分識別或群組成員資格,以判斷是否要刪減值。

您可以在下列情況下新增欄位遮罩:

重要

一旦從資料來源擷取每個資料列,就會套用遮罩。 運算式、述詞或排序皆在遮罩之後套用。 例如,遮罩資料行與另一個資料表中的另一個資料行之間的聯結將會使用遮罩值來進行聯結比較。

如需有關如何使用資料行遮罩的詳細資訊,請參閱使用資料列篩選和資料行遮罩篩選敏感資料表資料

語法

MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]

參數

  • func_name

    至少有一個純量參數的 SQL UDF

    SQL UDF 的第一個參數與遮罩欄位 1:1 對應。 遮罩資料行的類型必須可轉換成 SQL UDF 參數類型。 如果 func_name 需要更多參數,USING COLUMNS 子句必須提供引數。

    函式的傳回類型必須可轉換成遮罩資料行的資料類型。

  • other_column_name

    選擇性地指定遮罩欄的表格中的其他欄,以傳遞至 func_name。 每個 other_column_name 都必須可轉換成 func_name 的對應參數。

    使用資料行遮罩,根據執行對 column_identifier 查詢的使用者、table_name 的值以及可選的 column_identifier,選擇性地匿名化 other_column 的值。

  • constant_literal

    指定類型與函式參數相符的常數參數。 支援下列類型:STRING、數值 (INTEGERFLOAT,DOUBLEDECIMAL …)、BOOLEANINTERVALNULL

範例

可以在使用資料列篩選和資料行遮罩篩選敏感資料表資料中找到更多範例。

-- 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