Unity Catalog での特権の管理
このページでは、Unity Catalog 内のデータやその他のオブジェクトへのアクセスを制御する方法について説明します。このモデルがHive metastoreのアクセス制御とどのように異なるかについては、「従来のHive metastoreとUnity Catalogの操作」を参照してください。
権限を管理できるのは誰ですか?
最初は、ユーザーはメタストア内のデータにアクセスできません。 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、および CREATE MATERIALIZED VIEW 特権も受け取ります。
詳細については、「Unity Catalogの自動有効化」を参照してください。
継承モデル
Unity Catalog のセキュリティ保護可能なオブジェクトは階層的であり、特権は下位に継承されます。 特権の継承元となる最上位のオブジェクトはカタログです。 つまり、カタログまたはスキーマに対する権限を付与すると、カタログまたはスキーマ内の現在および将来のすべてのオブジェクトに権限が自動的に付与されます。 たとえば、カタログに対する SELECT 権限をユーザーに付与すると、そのユーザーはそのカタログ内のすべてのテーブルとビューを選択 (読み取り) できるようになります。 Unity Catalog メタストアで付与された特権は継承されません。

オブジェクトの所有者には、そのオブジェクトに対するすべての権限が自動的に付与されます。さらに、オブジェクトの所有者は、オブジェクト自体とそのすべての子オブジェクトに対する権限を付与できます。つまり、スキーマの所有者は、スキーマ内のテーブルに対するすべての権限を自動的に持つわけではありませんが、スキーマ内のテーブルに対する権限を自分自身に付与できます。
パブリック プレビュー中 (2022 年 8 月 25 日より前) に Unity Catalog メタストアを作成した場合は、現在の継承モデルをサポートしていない以前の特権モデルを使用している可能性があります。Privilege Model バージョン 1.0 にアップグレードして、特権の継承を取得できます。「特権の継承へのアップグレード」を参照してください。
アクセス要求と宛先の設定
プレビュー
この機能は パブリック プレビュー段階です。
ユーザーは、通常、 BROWSE 権限を持つことで、カタログエクスプローラー、検索、または直接リンクを使用して、検出できるオブジェクトへのアクセスを要求できます。これらの要求は、オブジェクト所有者がセキュリティ保護可能なオブジェクトに構成するアクセス要求の宛先にアクセスするために送信されます。宛先には、Eメール アドレス、Slack チャンネル、 Microsoft Teams チャンネル、Webhook、または組織の承認システムへのリダイレクト URL を含めることができます。
アクセス要求を有効にするには、宛先を設定する必要があります。宛先は子オブジェクトによって継承されます。詳細については、 情報 アクセス要求の宛先を管理する を参照してください。
権限の表示、付与、取り消し
メタストア オブジェクトの特権は、SQL コマンド、Databricks CLI、Databricks Terraform プロバイダー、またはカタログ エクスプローラーを使用して管理できます。
次の SQL コマンドで、次のプレースホルダー値を置き換えます。
- <privilege-type>は Unity Catalog の特権の種類です。 権限タイプを参照してください。
- <securable-type>: セキュリティ保護可能なオブジェクトのタイプ (- CATALOGや- TABLEなど)。 セキュリティ保護可能なオブジェクトを参照してください
- <securable-name>: セキュリティ保護可能なリソースの名前。 セキュリティ保護可能な種類が- METASTOREの場合は、セキュリティ保護可能な名前を指定しないでください。 これは、ワークスペースにアタッチされたメタストアと見なされます。
- <principal>はユーザー、 (applicationId 値で表される)サービスプリンシパル、またはグループです。 特殊文字を含むユーザー名、サービスプリンシパル名、およびグループ名は、バッククォート (
オブジェクトの権限を表示する
現在、オブジェクトに対する 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
オブジェクトに対する許可を表示する
必要な権限: オブジェクトに対する自分の権限はいつでも表示できます。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、カタログ をクリックします。 
- オブジェクト (カタログ、スキーマ、テーブル、ビューなど) を選択します。
- [権限 ]タブに移動します。オブジェクトの所有者またはメタストア管理者でない場合は、オブジェクトに対する自分の権限のみを表示できます。
ノートブックまたは SQL クエリエディタで次の SQL コマンドを実行して、オブジェクトに対する権限を表示します。
  SHOW GRANTS `<user>@<domain-name>` ON  <securable-type> <securable-name>
オブジェクトに対する権限を付与する
必要な権限: メタストア管理者、オブジェクトに対する 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`;
オブジェクトの権限を取り消す
必要な権限: メタストア管理者、オブジェクトに対する 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`;
REVOKE ステートメントは、指定された特権が最初に付与されていなくても成功します。これにより、以前の状態に関係なく、特権が存在しないことが保証されます。
メタストアでの許可の表示
必要な権限: メタストア管理者またはアカウント管理者。 また、メタストアで自分の権限を表示することもできます。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、カタログ をクリックします。 
- カタログ パネルの上部にある歯車アイコンをクリックし、 Metastore を選択します。 
- 「 アクセス許可 」タブをクリックします。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。特定のプリンシパルに権限を表示することも、メタストアにすべての権限を表示することもできます。
  SHOW GRANTS [principal] ON METASTORE
メタストアに権限を付与する
必要な権限: メタストア管理者またはアカウント管理者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、カタログ をクリックします。 
- カタログ パネルの上部にある歯車アイコンをクリックし、 Metastore を選択します。 
- アクセス許可 タブで、 許可 をクリックします。
- ユーザーのEメールアドレスまたはグループの名前を入力します。
- 付与する権限を選択します。
- OK をクリックします。
- 
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 SQLGRANT <privilege-type> ON METASTORE TO <principal>;メタストアに対する権限を付与する場合は、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名は含まれません。 
メタストアの権限を取り消す
必要な権限: メタストア管理者またはアカウント管理者。
- Catalog Explorer
- SQL
- Databricks ワークスペースで、カタログ をクリックします。 
- カタログ パネルの上部にある歯車アイコンをクリックし、 Metastore を選択します。 
- [権限] タブで、ユーザーまたはグループを選択し、[ 取り消し] をクリックします。
- 確認するには、[ 取り消し] をクリックします。
- 
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 SQLREVOKE <privilege-type> ON METASTORE FROM <principal>;メタストアに対する特権を取り消す場合、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名は含まれません。