Unity Catalog の特権の管理

このページでは、Unity Catalog のセキュリティ保護可能なオブジェクトに対する権限を付与、取り消し、検査する方法と、オブジェクトの所有権を管理する方法について説明します。 アクセス許可モデル、特権の継承、所有権に関する概念の背景情報については、 Unity カタログのアクセス許可モデルの概念を参照してください。

誰が特権を管理できますか?

初期状態では、ユーザーはメタストア内のデータにアクセスできません。 Azure Databricks アカウント管理者、ワークスペース管理者、メタストア管理者には、Unity Catalog を管理するための既定の特権があります。 「Unity Catalog の管理者特権」に関する記事を参照してください。

Unity Catalog 内のすべてのセキュリティ保護可能なオブジェクトには所有者が存在します。 オブジェクト所有者は、他のプリンシパルに権限を付与する機能を含め、そのオブジェクトに対するすべての権限を持ちます。 所有者は、オブジェクトに対する MANAGE 特権を他のユーザーに付与できます。これにより、ユーザーはオブジェクトに対する特権を管理できます。 オブジェクトの所有権の管理を参照してください。

特権は、次のいずれかによって付与できます。

  • オブジェクトの所有者。
  • オブジェクトを含むカタログまたはスキーマの所有者。
  • オブジェクトに対する MANAGE 権限を持つユーザー。
  • メタストア管理者。

アカウント管理者は、メタストアで直接権限を付与することもできます。

ワークスペース カタログ特権

ワークスペースで Unity Catalog が自動的に有効になった場合、ワークスペースは既定でメタストアにアタッチされ、メタストア内のワークスペースに対してワークスペース カタログが作成されます。 ワークスペース管理者は、ワークスペース カタログの既定の所有者です。 所有者は、ワークスペース カタログとすべての子オブジェクトに対する特権を管理できます。

すべてのワークスペース ユーザーは、ワークスペース カタログに対する USE CATALOG 特権を受け取ります。 ワークスペース ユーザーは、カタログ内の USE SCHEMA スキーマに対する CREATE TABLECREATE VOLUMECREATE MODELCREATE FUNCTIONCREATE MATERIALIZED VIEWdefault の特権も受け取ります。

詳細については、「Unity Catalog の自動有効化」を参照してください。

特権を表示、付与、取り消す

SQL コマンド、Databricks CLIDatabricks Terraform プロバイダー、または Catalog Explorer を使用して、メタストア オブジェクトの特権を管理できます。

次の SQL コマンドで、これらのプレースホルダー値を置き換えます。

  • <privilege-type> は Unity Catalog の特権の種類です。 「特権の種類」を参照してください。
  • <securable-type>: CATALOGTABLE などのセキュリティ保護可能なオブジェクトの型。 「セキュリティ保護可能なオブジェクト」を参照してください
  • <securable-name>: セキュリティ保護可能なリソースの名前。 セキュリティ保護可能な型が METASTORE の場合は、セキュリティ保護可能な名前を指定しないでください。 ワークスペースにアタッチされているメタストアとみなされます。
  • <principal> は、ユーザー、サービス プリンシパル (applicationId 値で表される)、またはグループです。 特殊文字を含むユーザー、サービス プリンシパル、およびグループ名は、バックティック (` `) で囲む必要があります。 「プリンシパル」を参照してください。

オブジェクトに対する許可の表示

現在、オブジェクトに対する MANAGE 特権を持つユーザーは、そのオブジェクトのすべての許可を INFORMATION_SCHEMA で表示することはできません。 代わりに、INFORMATION_SCHEMA では、オブジェクトに対する自身の許可のみが表示されます。 この動作は、今後修正される予定です。

MANAGE 特権を持つユーザーは、SQL コマンドまたはカタログ エクスプローラーを使用して、オブジェクトでのすべての許可を表示できます。 「Unity Catalog の特権の管理」を参照してください。

必要なアクセス許可:

  • メタストア管理者、オブジェクトに対する MANAGE 特権を持つユーザー、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者は、オブジェクトのすべての許可を表示できます。
  • 上記のアクセス許可がない場合、オブジェクトに対する自身の許可のみを表示できます。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。
  3. [アクセス許可] タブに移動します。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 特定のプリンシパルに対する許可を表示することも、セキュリティ保護可能なオブジェクトに対するすべての許可を表示することもできます。

  SHOW GRANTS [principal] ON  <securable-type> <securable-name>

たとえば、次のコマンドは、main という名前の親カタログに含まれる default という名前のスキーマに対するすべての許可を表示します。

  SHOW GRANTS ON SCHEMA main.default;

このコマンドによって次の情報が返されます。

  principal     actionType     objectType objectKey
  ------------- -------------  ---------- ------------
  finance-team   CREATE TABLE  SCHEMA     main.default
  finance-team   USE SCHEMA    SCHEMA     main.default

オブジェクトに自分の許可を表示する

必要なアクセス許可: オブジェクトに対する自分の許可を常に表示できます。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。
  3. [アクセス許可] タブに移動します。オブジェクト所有者でもメタストア管理者でもないユーザーは、オブジェクトに対する自身の許可のみを表示できます。

SQL

ノートブックまたは SQL クエリエディタで次の SQL コマンドを実行して、オブジェクトに対する許可を表示します。

  SHOW GRANTS `<user>@<domain-name>` ON  <securable-type> <securable-name>

オブジェクトに対するアクセス許可を付与する

必要なアクセス許可: メタストア管理者、オブジェクトに対する MANAGE 特権を持つユーザー、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。
  3. [アクセス許可] タブに移動します。
  4. [許可] をクリックします。
  5. ユーザーのメール アドレスまたはグループの名前を入力します。
  6. 付与するアクセス許可を選択します。
  7. [OK] をクリックします。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。

  GRANT <privilege-type> ON <securable-type> <securable-name> TO <principal>

たとえば、次のコマンドは、finance-team という名前のグループに、main という名前の親カタログを使用して default という名前のスキーマにテーブルを作成するためのアクセスを付与します。

  GRANT CREATE TABLE ON SCHEMA main.default TO `finance-team`;
  GRANT USE SCHEMA ON SCHEMA main.default TO `finance-team`;
  GRANT USE CATALOG ON CATALOG main TO `finance-team`;

登録されたモデルは関数の種類であることに注意してください。 モデルに特権を付与するには、GRANT ON FUNCTION を使用する必要があります。 たとえば、モデル ml-team-acmeに対するEXECUTE権限prod.ml_team.iris_modelグループに付与するには、次のコマンドを使用します。

  GRANT EXECUTE ON FUNCTION prod.ml_team.iris_model TO `ml-team-acme`;

オブジェクトに対する権限を取り消す

必要なアクセス許可: メタストア管理者、オブジェクトに対する MANAGE 特権を持つユーザー、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。
  3. [アクセス許可] タブに移動します。
  4. ユーザー、サービス プリンシパル、またはグループに許可されている特権を選択します。
  5. [取り消し] をクリックします。
  6. 確定するために、[取り消し] をクリックします。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。

  REVOKE <privilege-type> ON <securable-type> <securable-name> FROM <principal>

たとえば、次のコマンドは、finance-team という名前のグループに付与した、main という名前の親カタログを使用して default という名前のスキーマにテーブルを作成するためのアクセスを取り消します。

  REVOKE CREATE TABLE ON SCHEMA main.default FROM `finance-team`;

指定した特権が最初に付与されなかった場合でも、 REVOKE ステートメントは成功します。 これにより、以前の状態に関係なく、特権が存在しないことが保証されます。

メタストアに対する許可を表示する

必要なアクセス許可: メタストア管理者またはアカウント管理者。メタストアで自身の許可を表示することもできます。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. [カタログ] ウィンドウの上部にある歯車アイコンをクリックします。歯車アイコンをクリックし、[メタストア] を選択します。
  3. [Permissions] タブをクリックします。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 特定のプリンシパルに対する許可を表示することも、メタストアに対するすべての許可を表示することもできます。

  SHOW GRANTS [principal] ON METASTORE

メタストアに対するアクセス許可を付与する

必要なアクセス許可: メタストア管理者またはアカウント管理者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. [カタログ] ウィンドウの上部にある歯車アイコンをクリックします。歯車アイコンをクリックし、[メタストア] を選択します。
  3. [アクセス許可] タブで [付与] をクリックします。
  4. ユーザーのメール アドレスまたはグループの名前を入力します。
  5. 付与するアクセス許可を選択します。
  6. [OK] をクリックします。

SQL

  1. ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。

    GRANT <privilege-type> ON METASTORE TO <principal>;
    

    メタストアに対する特権を付与する場合は、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名を含めることはできません。

メタストアに対するアクセス許可を取り消す

必要なアクセス許可: メタストア管理者またはアカウント管理者。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ
  2. [カタログ] ウィンドウの上部にある歯車アイコンをクリックします。歯車アイコンをクリックし、[メタストア] を選択します。
  3. [アクセス許可] タブで、ユーザーまたはグループを選択し、[取り消し] をクリックします。
  4. 確定するために、[取り消し] をクリックします。

SQL

  1. ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。

    REVOKE <privilege-type> ON METASTORE FROM <principal>;
    

    メタストアに対する特権を取り消す場合は、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名を含めることはできません。

オブジェクトの所有権を管理する

オブジェクトの所有者を表示する

カタログ エクスプローラーまたは SQL ステートメントを使用して、オブジェクトの所有者を表示できます。

必要なアクセス許可: オブジェクトまたはオブジェクトの親に対して BROWSE 特権を持つユーザーは、オブジェクト所有者を表示できます。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ

  2. カタログ、スキーマ、テーブル、ビュー、ボリューム、外部の場所、ストレージ資格情報などのオブジェクトを選択します。

    オブジェクトに移動する方法はオブジェクトによって異なります。 カタログ、スキーマ、スキーマの内容 (テーブルやボリュームなど) は、左側の [カタログ] ペインで選択できます。 歯車アイコン をクリックしてメニューからオブジェクトカテゴリを選択すると、外部の場所やDelta Sharingの共有などの他のオブジェクトを見つけることができます。

    ほとんどのオブジェクトの所有者は、オブジェクトの詳細ページの [概要] タブに表示されます。 外部の場所などの一部のオブジェクトの場合、オブジェクトの詳細ページの上部に表示されます。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 プレースホルダー値を次のように置き換えます。

  • <securable-type>: CATALOGTABLEなど、保護可能なセキュリティタイプの一種。
  • <catalog>: スキーマまたはスキーマの内容を表示している場合は、親カタログ。
  • <schema>: テーブルやビューなどのスキーマの内容を表示している場合は、親スキーマ。
  • <securable-name>: セキュリティ保護可能なオブジェクトの名前を指定します。
DESCRIBE <securable-type> EXTENDED <catalog>.<schema>.<securable-name>;

所有権の移転

カタログ エクスプローラーまたは SQL ステートメントを使用して、オブジェクトの所有者を転送できます。

必要なアクセス許可: 現在の所有者、メタストア管理者、コンテナーの所有者 (スキーマのカタログ、テーブルのスキーマ)、またはオブジェクトに対する MANAGE 権限を持つユーザーである場合は、オブジェクトの所有権を譲渡できます。 Delta Sharing 共有オブジェクトは例外です。共有の所有権を譲渡できるのはメタストア管理者のみです。

特権のエスカレーションを防ぐために、アカウント内の任意のユーザー、サービス プリンシパル、またはグループにビュー、関数、またはモデルの所有権を譲渡できるのはメタストア管理者だけです。 MANAGE 特権を持つ現在の所有者とユーザーは、自分のユーザー名またはメンバーであるグループに所有権を譲渡するように制限されます。

ヒント

ビューまたはメトリック ビューの所有権をグループに転送すると、共同編集が可能になります。 グループがビューまたはメトリック ビューを所有している場合、すべてのグループ メンバーは定義を編集できますが、データ アクセスはグループに表示するアクセス許可に制限されます。 詳細なガイダンスについては、「 共同作業の編集を有効にする」を参照してください。

Databricks SQL で作成された具体化されたビューとストリーミング テーブルは、所有権を譲渡できます。 詳細については、「 具体化されたビューの所有者を変更する 」および 「ストリーミング テーブルの所有者を変更する」を参照してください。

Lakeflow Spark 宣言パイプラインで作成された具体化されたビューとストリーミング テーブルは、所有権を直接譲渡することはできません。 代わりに、データセットを所有するパイプラインの実行ユーザーを変更します。 次回の更新では、所有者は実行ユーザーに更新されます。 「 実行ユーザーの設定」を参照してください。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ

  2. カタログ、スキーマ、テーブル、ビュー、外部の場所、ストレージ資格情報などのオブジェクトを選択します。

    オブジェクトに移動する方法はオブジェクトによって異なります。 カタログ、スキーマ、スキーマの内容 (テーブルやボリュームなど) は、左側の [カタログ] ペインで選択できます。 歯車アイコン をクリックしてメニューからオブジェクトカテゴリを選択すると、外部の場所やDelta Sharingの共有などの他のオブジェクトを見つけることができます。

    ほとんどのオブジェクトの所有者は、オブジェクトの詳細ページの [概要] タブに表示されます。 外部の場所などの一部のオブジェクトの場合、オブジェクトの詳細ページの上部に表示されます。

  3. 編集アイコン所有者の横にある編集アイコンをクリックします。

  4. グループ、ユーザー、またはサービス プリンシパルを検索して選択します。

  5. [保存] をクリックします。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 プレースホルダー値を次のように置き換えます。

  • <securable-type>: CATALOGTABLE などのセキュリティ保護可能なオブジェクトの型。 このコマンドでは、METASTORE はセキュリティ保護可能なオブジェクトとしてサポートされていません。
  • <securable-name>: セキュリティ保護可能なリソースの名前。 スキーマまたはスキーマの内容を変更する場合は、親カタログやスキーマを既に指定していない限り、完全な 3 レベルの名前空間 (catalog.schema.object) を使用する必要があります。
  • <principal> は、ユーザー、サービス プリンシパル (applicationId 値で表される)、またはグループです。 特殊文字を含むユーザー、サービス プリンシパル、およびグループ名は、バックティック (` `) で囲む必要があります。 「プリンシパル」を参照してください。
ALTER <securable-type> <securable-name> OWNER TO <principal>;

たとえば、orders テーブルの所有権を accounting グループに譲渡するには、次のようにします。

ALTER TABLE mycatalog.myschema.orders OWNER TO `accounting`;