mask

適用対象: check marked yes Databricks SQL Databricks Runtime 12.2 LTS 以降 Unity Catalog のみ

テーブルから行が取り込まれるたびに列に適用される関数を指定します。 その列からの後続のすべてのクエリは、列の元の値の代わりに、列に対してその関数の評価結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。

列マスクは、次の場合に追加できます。

重要

マスクは、データ ソースから各行がフェッチされるとすぐに適用されます。 式、述語、または順序は、マスクの後に適用されます。 たとえば、マスクされた列を別のテーブルの別の列に結合すると、結合の比較にはマスクされた値が使われます。

列マスクの使用方法の詳細については、「行フィルターと列マスクを使って機密性の高いテーブル データをフィルター処理する」を参照してください。

構文

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

パラメーター

  • func_name

    少なくとも 1 つのパラメーターを持つスカラー SQL UDF

    SQL UDF の最初のパラメーターは、マスクされた列と 1:1 でマップされます。 マスクされた列の型は、SQL UDF パラメーター型にキャスト可能である必要があります。 func_name に追加のパラメーターが必要な場合は、USING COLUMNS 句によって引数を指定する必要があります。

    関数の戻り値の型は、マスクされた列のデータ型にキャスト可能である必要があります。

  • other_column_name

    必要に応じて、func_name に渡す、マスクされた列のテーブルの追加の列を指定します。 各 other_column_name は、func_name の対応するパラメーターにキャスト可能である必要があります。

    列マスクを使って、table_name に対してクエリを実行しているユーザーに基づいて column_identifier の値 (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