ダイナミック ビューを作成する
Unity Catalog では、動的ビューを使用して、次のようなきめ細かいアクセス制御を構成できます。
列または行レベルでのセキュリティ。
データマスキング。
Unity Catalog では、ビュー内の行、列、またはレコードにアクセスできるユーザーを動的に制限できる次の関数が導入されています。
current_user()
: 現在のユーザーの電子メールアドレスを返します。is_account_group_member()
: 現在のユーザーが特定のアカウント レベルのグループのメンバーである場合はTRUE
を返します。 Unity Catalogデータに対する動的ビューでの使用が推奨されます。is_member()
: 現在のユーザーが特定のワークスペース レベルのグループのメンバーである場合はTRUE
を返します。 この関数は、既存のHive metastoreとの互換性のために提供されています。 アカウント レベルのグループ メンバーシップを評価しないため、Unity Catalog データに対するビューでは使用しないでください。
Databricks では、ビューで参照されるテーブルとビューを読み取る権限をユーザーに付与しないことをお勧めします。
次の例は、Unity Catalog で動的ビューを作成する方法を示しています。
始める前に
動的ビューを作成または読み取るための要件は、コンピュート要件を除いて、標準ビューの場合と同じです。 次のコンピュート リソースのいずれかを使用する必要があります。
SQLウェアハウス。
共有アクセスモードによるコンピュート。
Databricks Runtime 15.4 LTS 以上のシングル ユーザー アクセス モードを備えたコンピュート。
シングル ユーザー コンピュートを使用して動的ビューを読み取る Databricks Runtime 15.3 以前では読み取れません。
Databricks Runtime 15.4 LTS 以降で提供されているデータ フィルタリングを利用するには、ワークスペースがサーバレス コンピュートに対して有効になっていることも確認する必要があります。これは、動的ビューをサポートするデータ フィルタリング機能がサーバレス コンピュートで実行されるためです。そのため、シングル ユーザ コンピュートを使用して動的ビューを読み取ると、サーバレス コンピュート リソースの料金が請求される場合があります。 「シングル ユーザー コンピュートに対するきめ細かなアクセス制御」を参照してください。
列レベルの権限
動的ビューを使用すると、特定のユーザーまたはグループがアクセスできる列を制限できます。 次の例では、 auditors
グループのメンバーだけが、 sales_raw
テーブルの電子メール アドレスにアクセスできます。 クエリ分析中に、 Apache Spark CASE
ステートメントをリテラル文字列 REDACTED
または電子メール アドレス列の実際の内容に置き換えます。 他の列は通常どおり返されます。 この戦略は、クエリのパフォーマンスに悪影響を与えません。
-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
user_id,
CASE WHEN
is_account_group_member('auditors') THEN email
ELSE 'REDACTED'
END AS email,
country,
product,
total
FROM sales_raw
行レベルの権限
動的ビューでは、行レベルまたはフィールド レベルまで権限を指定できます。 次の例では、取引金額が 1,000,000 ドルを超える場合、 managers
グループのメンバーだけがその取引金額を表示できます。 一致する結果は、他のユーザーに対してフィルターで除外されます。
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_account_group_member('managers') THEN TRUE
ELSE total <= 1000000
END;
データマスキング
Unity CatalogのビューはSpark SQLを使用するため、より複雑なSQL式や正規表現を使用して高度なデータマスキングを実装できます。 次の例では、すべてのユーザーが E メール ドメインを分析できますが、ユーザーの E メール アドレス全体を表示できるのはauditors
グループのメンバーだけです。
-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.
CREATE VIEW sales_redacted AS
SELECT
user_id,
region,
CASE
WHEN is_account_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw