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