Unity Catalog で権限を管理する

この記事では、Unity Catalog 内のデータやその他のオブジェクトへのアクセスを制御する方法について説明します。 このモデルがHive metastoreのアクセス制御とどのように異なるかについては、 Unity Catalogと従来のHive metastoreの操作」を参照してください。

権限を管理できるのは誰ですか?

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

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

特権は、メタストア管理者、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者によって付与できます。 アカウント管理者はメタストアに対して直接権限を付与することもできます。

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

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

すべてのワークスペース ユーザーに、ワークスペース カタログに対するUSE CATALOG権限が付与されます。 ワークスペース ユーザーには、カタログ内のdefaultスキーマに対するUSE SCHEMACREATE TABLECREATE VOLUMECREATE MODELCREATE FUNCTION 、およびCREATE MATERIALIZED VIEW権限も付与されます。

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

継承モデル

Unity Catalog 内のセキュリティ保護可能なオブジェクトは階層化されており、権限は下位に継承されます。 特権が継承される最上位のオブジェクトはカタログです。 つまり、カタログまたはスキーマに対する特権を付与すると、そのカタログまたはスキーマ内の現在および将来のすべてのオブジェクトに特権が自動的に付与されます。 たとえば、カタログに対する SELECT 権限をユーザーに付与すると、そのユーザーはそのカタログ内のすべてのテーブルとビューを選択 (読み取り) できるようになります。 Unity Catalogメタストアで付与された権限は継承されません。

Unity Catalogオブジェクト階層

オブジェクトの所有者には、そのオブジェクトに対するすべての権限が自動的に付与されます。 さらに、オブジェクト所有者は、オブジェクト自体とそのすべての子オブジェクトに対する権限を付与できます。 つまり、スキーマの所有者は、スキーマ内のテーブルに対するすべての権限を自動的に持つわけではありませんが、スキーマ内のテーブルに対する権限を自分自身に付与することはできます。

パブリックプレビュー期間中(2022 年 8 月 25 日より前)に Unity Catalog メタストアを作成した場合、現在の継承モデルをサポートしていない以前の権限モデルを使用している可能性があります。 権限モデル・バージョン1.0にアップグレードして、権限の継承を取得できます。 「特権継承へのアップグレード」を参照してください。

権限の表示、付与、および取り消し

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

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

  • <privilege-type> Unity Catalog権限タイプです。 「特権タイプ」を参照してください。

  • <securable-type>: セキュリティ保護可能なオブジェクトの種類 ( CATALOGTABLEなど)。 「セキュリティ保護可能なオブジェクト」を参照してください

  • <securable-name>: セキュリティ保護可能なリソースの名前。 セキュリティ保護可能なタイプが METASTOREの場合は、セキュリティ保護可能な名前を指定しないでください。 これは、ワークスペースに接続されたメタストアであると想定されます。

  • <principal> ユーザー、サービスプリンシパル (applicationId 値によって表される)、またはグループです。 特殊文字を含むユーザー名、サービスプリンシパル名、およびグループ名はバッククォート ( ` ` ) で囲む必要があります。 「 プリンシパル」を参照してください。

Unity Catalog メタストア内のオブジェクトに対する権限を表示する

必要な権限:

  • メタストア管理者、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者は、オブジェクトに対するすべての許可を表示できます。

  • 上記の権限がない場合、オブジェクトに対する自分の権限のみを表示できます。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。

  3. 「権限」タブに移動します。

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

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

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

  SHOW GRANTS ON SCHEMA main.default;

コマンドは次を返します:

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

Unity Catalogメタストア内のオブジェクトに対する権限を表示する

必要な権限: オブジェクトに対する自分の権限はいつでも表示できます。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。

  3. 「権限」タブに移動します。 オブジェクトの所有者またはメタストア管理者でない場合は、オブジェクトに対する自分の権限のみを表示できます。

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

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

Unity Catalog メタストア内のオブジェクトに対するアクセス許可を付与する

必要な権限: メタストア管理者、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。

  3. 「権限」タブに移動します。

  4. [付与] をクリックします。

  5. ユーザーの電子メール アドレスまたはグループの名前を入力します。

  6. 付与する権限を選択します。

  7. OK」をクリックします。

ノートブックまたは 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を使用する必要があります。 たとえば、モデルprod.ml_team.iris_modelに対するEXECUTE権限をグループに付与ml-team-acmeには、次のコマンドを使用します。

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

Unity Catalog メタストア内のオブジェクトに対するアクセス許可を取り消す

必要な権限: メタストア管理者、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. カタログ、スキーマ、テーブル、ビューなどのオブジェクトを選択します。

  3. 「権限」タブに移動します。

  4. ユーザー、サービス プリンシパル、またはグループに付与されている権限を選択します。

  5. [ 取り消し] をクリックします。

  6. 確認するには、[ 取り消し] をクリックします。

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

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

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

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

メタストアの権限を表示する

必要な権限:メタストア管理者またはアカウント管理者。 また、メタストアで独自の権限を表示することもできます。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. 「カタログエクスプローラ」(Catalog Explorer) ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。

  3. 「権限」タブに移動します。

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

  SHOW GRANTS [principal] ON METASTORE

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

必要な権限:メタストア管理者またはアカウント管理者。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. 「カタログエクスプローラ」(Catalog Explorer) ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。

  3. [権限]タブで、 [許可]をクリックします。

  4. ユーザーの電子メール アドレスまたはグループの名前を入力します。

  5. 付与する権限を選択します。

  6. OK」をクリックします。

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

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

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

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

必要な権限:メタストア管理者またはアカウント管理者。

  1. Databricksワークスペースで、カタログ アイコンカタログ

  2. 「カタログエクスプローラ」(Catalog Explorer) ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。

  3. [権限]タブで、ユーザーまたはグループを選択し、 [取り消し]をクリックします。

  4. 確認するには、[ 取り消し] をクリックします。

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

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

    メタストアの権限を取り消す場合は、ワークスペースに接続されているメタストアが想定されるため、メタストア名を含めません。