ダイナミック ビューを作成する

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