メインコンテンツまでスキップ

ダイナミック ビューの作成

Unity Catalog では、動的ビューを使用して、次のようなきめ細かなアクセス制御を構成できます。

  • 列または行のレベルでのセキュリティ。
  • データマスキング。

Unity Catalog には次の関数が導入されており、ビュー内の行、列、またはレコードにアクセスできるユーザーを動的に制限できます。

  • current_user(): 現在のユーザーのEメール アドレスを返します。
  • is_account_group_member(): 現在のユーザーが特定のアカウント レベルのグループのメンバーである場合は、 TRUE を返します。 Unity Catalog データに対する動的ビューで使用することをお勧めします。
  • is_member(): 現在のユーザーが特定のワークスペース レベルのグループのメンバーである場合は、 TRUE を返します。 この機能は、既存の Hive metastoreとの互換性のために提供されています。 アカウント レベルのグループ メンバーシップを評価しないため、Unity Catalog データに対するビューと共に使用することは避けてください。

Databricks では、ビューで参照されているテーブルとビューを読み取る権限をユーザーに付与しないことをお勧めします。

次の例は、Unity Catalog で動的ビューを作成する方法を示しています。

始める前に

動的ビューを作成または読み取るための要件は、コンピュートの要件を除き、 標準ビューの要件と同じです。 次のいずれかのコンピュート リソースを使用する必要があります。

  • A SQLウェアハウス.
  • 標準アクセスモード(以前の共有アクセスモード)のコンピュート。
  • Databricks Runtime 15.4 LTS 以上の専用アクセスモード(旧シングルユーザーアクセスモード)を搭載したコンピュート。

Databricks Runtime 15.3以下では、専用のコンピュートを使用してダイナミックビューを読み取ることはできません。

Databricks Runtime 15.4 LTS 以降で提供されているデータ フィルタリングを利用するには、 ワークスペースがサーバレス コンピュートに対して有効になっている ことも確認する必要があります。これは、動的ビューをサポートするデータ フィルタリング機能がサーバレス コンピュートで実行されるためです。そのため、専用のコンピュートを使用して動的ビューを読み取ると、サーバレス コンピュート リソースの料金が請求される場合があります。 「専用コンピュート (旧称 single user コンピュート) のきめ細かなアクセス制御」を参照してください。

列レベルの権限

ダイナミック ビューでは、特定のユーザーまたはグループがアクセスできる列を制限できます。 次の例では、 auditors グループのメンバーのみが sales_raw テーブルから Eメール アドレスにアクセスできます。 クエリ分析中、 Apache Spark は CASE ステートメントをリテラル文字列 REDACTED または Eメール address カラムの実際の内容に置き換えます。 他の列は通常どおり返されます。 この戦略は、クエリのパフォーマンスに悪影響を与えません。

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

行レベルのアクセス許可

ダイナミック ビューでは、行レベルまたはフィールド レベルまでの権限を指定できます。 次の例では、 managers グループのメンバーのみが、トランザクション金額が $1,000,000 を超えると表示できます。 他のユーザーに一致する結果は除外されます。

SQL
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 グループのメンバーのみです。

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