Unity Catalog での特権の管理
この記事では、Unity Catalog 内のデータやその他のオブジェクトへのアクセスを制御する方法について説明します。 このモデルがHive metastoreのアクセス制御とどのように異なるかについては、Unity Catalogおよび従来のHive metastoreの操作を参照してください。
特権を管理できるのは誰ですか?
最初は、ユーザーはメタストア内のデータにアクセスできません。 Databricks アカウント管理者、ワークスペース管理者、およびメタストア管理者には、 Unity Catalogを管理するためのデフォルトの特権があります。 「Unity Catalog の管理者特権」を参照してください。
Unity Catalog 内のすべてのセキュリティ保護可能なオブジェクトには所有者がいます。 オブジェクト所有者は、他のプリンシパルに権限を付与する機能を含め、そのオブジェクトに対するすべての権限を持ちます。 所有者は、オブジェクトに対する MANAGE
権限を他のユーザーに付与でき、これによりユーザーはオブジェクトに対する権限を管理できます。 「Unity Catalog オブジェクトの所有権の管理」を参照してください。
特権は、次のいずれかによって付与できます。
- メタストア管理者。
- オブジェクトに対する
MANAGE
権限を持つユーザー。 - オブジェクトの所有者。
- オブジェクトを含むカタログまたはスキーマの所有者。
アカウント管理者は、メタストアで直接権限を付与することもできます。
ワークスペースカタログの権限
ワークスペースでUnity Catalogが自動的に有効になった場合、ワークスペースはデフォルトでメタストアにアタッチされ、メタストア内のワークスペースのワークスペースカタログが作成されます。ワークスペース管理者は、ワークスペースカタログのデフォルト所有者です。所有者は、ワークスペースカタログとすべての子オブジェクトに対する権限を管理できます。
すべてのワークスペース ユーザーは、ワークスペース カタログに対する USE CATALOG
権限を受け取ります。 ワークスペース ユーザーは、カタログ内のdefault
スキーマに対する USE SCHEMA
、 CREATE TABLE
、 CREATE VOLUME
、 CREATE MODEL
、および CREATE FUNCTION
特権も受け取ります。
詳細については、「Unity Catalogの自動有効化」を参照してください。
継承モデル
Unity Catalog のセキュリティ保護可能なオブジェクトは階層的であり、特権は下位に継承されます。 特権の継承元となる最上位のオブジェクトはカタログです。 つまり、カタログまたはスキーマに対する権限を付与すると、カタログまたはスキーマ内の現在および将来のすべてのオブジェクトに権限が自動的に付与されます。 たとえば、カタログに対する SELECT
権限をユーザーに付与すると、そのユーザーはそのカタログ内のすべてのテーブルとビューを選択 (読み取り) できるようになります。 Unity Catalog メタストアで付与された特権は継承されません。
オブジェクトの所有者には、そのオブジェクトに対するすべての権限が自動的に付与されます。さらに、オブジェクトの所有者は、オブジェクト自体とそのすべての子オブジェクトに対する権限を付与できます。つまり、スキーマの所有者は、スキーマ内のテーブルに対するすべての権限を自動的に持つわけではありませんが、スキーマ内のテーブルに対する権限を自分自身に付与できます。
権限の表示、付与、取り消し
メタストア オブジェクトの特権は、SQL コマンド、Databricks CLI、Databricks Terraform プロバイダー、またはカタログ エクスプローラーを使用して管理できます。
次の SQL コマンドで、次のプレースホルダー値を置き換えます。
<privilege-type>
は Unity Catalog の特権の種類です。 権限タイプを参照してください。<securable-type>
: セキュリティ保護可能なオブジェクトのタイプ (CATALOG
やTABLE
など)。 セキュリティ保護可能なオブジェクトを参照してください<securable-name>
: セキュリティ保護可能なリソースの名前。 セキュリティ保護可能な種類がMETASTORE
の場合は、セキュリティ保護可能な名前を指定しないでください。 これは、ワークスペースにアタッチされたメタストアと見なされます。<principal>
はユーザー、 (applicationId 値で表される)サービスプリンシパル、またはグループです。 特殊文字を含むユーザー名、サービスプリンシパル名、およびグループ名は、バッククォート (
Unity Catalog メタストア内のオブジェクトに対する許可を表示する
現在、オブジェクトに対する MANAGE
権限を持つユーザは、 INFORMATION_SCHEMA
でそのオブジェクトに対するすべての付与を表示することはできません。 代わりに、 INFORMATION_SCHEMA
には、オブジェクトに対する独自の許可のみが表示されます。 この動作は今後修正される予定です。
MANAGE
権限を持つユーザーは、SQL コマンドまたはカタログエクスプローラを使用して、オブジェクトに対するすべての権限を表示できます。Unity Catalog での特権の管理を参照してください。
必要な権限:
- メタストア管理者、オブジェクトに対する
MANAGE
権限を持つユーザー、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者は、オブジェクトに対するすべての権限を表示できます。 - 上記の権限がない場合、オブジェクトに対する自分の権限のみを表示できます。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- オブジェクト (カタログ、スキーマ、テーブル、ビューなど) を選択します。
- 権限 タブに移動します。
ノートブックまたは 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
Unity Catalog メタストア内のオブジェクトに対する権限の表示
必要な権限: オブジェクトに対する自分の権限はいつでも表示できます。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- オブジェクト (カタログ、スキーマ、テーブル、ビューなど) を選択します。
- [権限 ]タブに移動します。オブジェクトの所有者またはメタストア管理者でない場合は、オブジェクトに対する自分の権限のみを表示できます。
ノートブックまたは SQL クエリエディタで次の SQL コマンドを実行して、オブジェクトに対する権限を表示します。
SHOW GRANTS `<user>@<domain-name>` ON <securable-type> <securable-name>
Unity Catalog メタストア内のオブジェクトに対するアクセス許可を付与する
必要な権限: メタストア管理者、オブジェクトに対する MANAGE
権限、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- オブジェクト (カタログ、スキーマ、テーブル、ビューなど) を選択します。
- 権限 タブに移動します。
- 付与 をクリックします。
- ユーザーのEメールアドレスまたはグループの名前を入力します。
- 付与する権限を選択します。
- 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 メタストア内のオブジェクトに対するアクセス許可を取り消す
必要な権限: メタストア管理者、オブジェクトに対する MANAGE
権限、オブジェクトの所有者、またはオブジェクトを含むカタログまたはスキーマの所有者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- オブジェクト (カタログ、スキーマ、テーブル、ビューなど) を選択します。
- 権限 タブに移動します。
- ユーザー、サービスプリンシパル、またはグループに付与されている権限を選択します。
- 取り消し をクリックします。
- 確認するには、[ 取り消し] をクリックします。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。
REVOKE <privilege-type> ON <securable-type> <securable-name> FROM <principal>
たとえば、次のコマンドは、親カタログが main という名前の default という名前のスキーマにテーブルを作成するための finance-team アクセスを取り消します。
REVOKE CREATE TABLE ON SCHEMA main.default FROM `finance-team`;
メタストアでの許可の表示
必要な権限: メタストア管理者またはアカウント管理者。 また、メタストアで自分の権限を表示することもできます。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- 「カタログエクスプローラ 」ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。
- 権限 タブに移動します。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。特定のプリンシパルに権限を表示することも、メタストアにすべての権限を表示することもできます。
SHOW GRANTS [principal] ON METASTORE
メタストアに権限を付与する
必要な権限: メタストア管理者またはアカウント管理者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- 「カタログエクスプローラ 」ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。
- アクセス許可 タブで、 許可 をクリックします。
- ユーザーのEメールアドレスまたはグループの名前を入力します。
- 付与する権限を選択します。
- OK をクリックします。
-
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。
SQLGRANT <privilege-type> ON METASTORE TO <principal>;
メタストアに対する権限を付与する場合は、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名は含まれません。
メタストアの権限を取り消す
必要な権限: メタストア管理者またはアカウント管理者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、
カタログ をクリックします。
- 「カタログエクスプローラ 」ページラベルの横にあるメタストア名の横にあるアイコンをクリックします。
- [権限] タブで、ユーザーまたはグループを選択し、[ 取り消し] をクリックします。
- 確認するには、[ 取り消し] をクリックします。
-
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。
SQLREVOKE <privilege-type> ON METASTORE FROM <principal>;
メタストアに対する特権を取り消す場合、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名は含まれません。