動的ビューを作成する

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