動的ビューを作成する
Unity Catalog では、動的ビューを使用して、次のようにアクセス制御をきめ細かく構成できます。
- 列または行のレベルでのセキュリティ。
- データ マスキング。
Unity Catalog には次の機能が導入されています。これにより、ビュー内の行、列、またはレコードにアクセスできるユーザーを動的に制限できます。
current_user()
: 現在のユーザーのメールアドレスを返します。is_account_group_member()
: 現在のユーザーが特定のアカウントレベル グループのメンバーである場合は、TRUE
を返します。 Unity Catalog データに対して動的ビューで使用することをお勧めしています。is_member()
: 現在のユーザーが特定のアカウントレベル グループのメンバーである場合は、TRUE
を返します。 この関数は、既存の Hive メタストアとの互換性を提供します。 Unity のカタログ データに対するビューでは使用しないでください。これは、アカウントレベルのグループ メンバーシップを評価しないためです。
Azure 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
行レベルのアクセス許可
動的ビューでは、行またはフィールドのレベルまでの権限を指定できます。 次に、100 万ドルを超えた場合に 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 式と正規表現を使用して高度なデータマスクを実装できます。 次の例では、すべてのユーザーがメールドメインを分析できますが、ユーザーのメールアドレス全体を表示できるのは 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