列 mask
句
適用対象: Databricks SQL Databricks Runtime 12.2 LTS 以降 Unity Catalog のみ
テーブルから行が取り込まれるたびに列に適用される関数を指定します。 その列からの後続のすべてのクエリは、列の元の値の代わりに、列に対してその関数の評価結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
列マスクは、次の場合に追加できます。
- CREATE TABLE を使用してテーブルを作成する。
- ALTER TABLE … ADD COLUMN を使用してテーブルに列を追加する。
- ALTER TABLE … ALTER COLUMN を使用して列を変更する。
重要
マスクは、データ ソースから各行がフェッチされるとすぐに適用されます。 式、述語、または順序は、マスクの後に適用されます。 たとえば、マスクされた列を別のテーブルの別の列に結合すると、結合の比較にはマスクされた値が使われます。
列マスクの使用方法の詳細については、「行フィルターと列マスクを使って機密性の高いテーブル データをフィルター処理する」を参照してください。
構文
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
パラメーター
-
少なくとも 1 つのパラメーターを持つスカラー SQL UDF。
SQL UDF の最初のパラメーターは、マスクされた列と 1:1 でマップされます。 マスクされた列の型は、SQL UDF パラメーター型にキャスト可能である必要があります。
func_name
に追加のパラメーターが必要な場合は、USING COLUMNS
句によって引数を指定する必要があります。関数の戻り値の型は、マスクされた列のデータ型にキャスト可能である必要があります。
-
必要に応じて、
func_name
に渡す、マスクされた列のテーブルの追加の列を指定します。 各other_column_name
は、func_name
の対応するパラメーターにキャスト可能である必要があります。列マスクを使って、
table_name
に対してクエリを実行しているユーザーに基づいてcolumn_identifier
の値 (column_identifier
の値と省略可能なother_column
) を選択的に匿名化します。 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