Unity カタログのアクセス許可モデルの概念

このページでは、オブジェクト モデル、特権、所有権、継承など、Unity カタログのアクセス許可モデルの主要な概念について説明します。

すべての Unity カタログ権限の一般的なリファレンスについては、 Unity カタログ権限リファレンスを参照してください。 権限の付与と取り消しの手順については、「権限の 表示、付与、取り消し」を参照してください。

セキュリティ保護可能なオブジェクト

Unity カタログでは、データとメタデータはメタストアと呼ばれる最上位のコンテナーに格納されます。 このメタストア内では、データは 3 レベルの名前空間 ( catalog.schema.table) 内のオブジェクトとして表されます。この階層構造は、Unity カタログでのアクセス制御の基礎も提供します。

Unity カタログ オブジェクト モデル階層

この階層内のすべてのオブジェクトは 、セキュリティ保護可能なオブジェクトです。 Unity カタログでのアクセス制御は、これらのセキュリティ保護可能なオブジェクトに対する権限 ( SELECTMODIFYUSE SCHEMAなど) を付与することによって機能します。 このモデルでは、組織全体のデータにアクセスして管理できるユーザーをきめ細かく制御できます。

セキュリティ保護可能なオブジェクトとそれぞれに適用される権限の完全な一覧については、 Unity カタログの権限リファレンスを参照してください

コンテナー オブジェクト

Unity カタログの一部のセキュリティ保護可能なオブジェクトは コンテナー オブジェクトです。つまり、階層内に子オブジェクトが含まれています。 コンテナー オブジェクトは、権限モデルで特別な役割を持ちます。これは、コンテナー オブジェクトに付与された権限が継承を通じてその子オブジェクトに影響を与える可能性があるためです。

Unity カタログのコンテナー オブジェクトを次に示します。

  • カタログ: 3 レベルの名前空間の最上位レベル。 カタログには、直接の子であるスキーマが含まれています。
  • スキーマ: 3 レベルの名前空間の中間レベル。 スキーマには、直接の子としてテーブル、ビュー、ボリューム、および関数が含まれます。

コンテナー オブジェクトには、いくつかの重要な特性があります。

特徴 Description
特権の継承 コンテナー オブジェクトに対する権限を付与すると、その権限は現在および将来のすべての子オブジェクトに自動的に適用されます。 たとえば、カタログに SELECT を付与すると、ユーザーはそのカタログ内のすべてのテーブルを (適切な使用特権で) 読み取ることができます。 特権の継承を参照してください。
使用権限 子オブジェクトにアクセスするには、親コンテナー オブジェクトに対する適切な USE CATALOG または USE SCHEMA 特権が必要です。 「使用権限」を参照してください。
子オブジェクトを管理する機能 コンテナー オブジェクトを所有している場合、それらの子を直接所有していない場合でも、すべての子オブジェクトを管理する機能が自動的に取得されます。 所有権を参照してください。
作成権限 コンテナー オブジェクトは、カタログでの CREATE SCHEMA やスキーマの CREATE TABLE など、ユーザーが子オブジェクトを作成できるようにする特権をサポートします。

テーブル、ビュー、ボリューム、関数などのコンテナー以外のオブジェクトには、子オブジェクトは含まれません。

特権

権限は、セキュリティ保護可能なオブジェクトに対してユーザーまたはグループが実行できるアクションを決定します。 一般的な特権は次のとおりです。

  • SELECT: テーブルまたはビューからデータを読み取る
  • MODIFY: テーブルまたはビューにデータを書き込む
  • USE CATALOG: カタログにアクセスする (子オブジェクトを操作するには追加の特権が必要)
  • USE SCHEMA: スキーマにアクセスします (子オブジェクトを操作するには追加の特権が必要です)
  • CREATE TABLE: スキーマ内にテーブルを作成する

ユーザーまたはグループには、アクションを実行する権限を明示的に付与する必要があります。

次のセクションでは、Azure Databricks の重要な特別な特権について説明します。 すべての権限の完全なリファレンスについては、 Unity カタログの権限リファレンスを参照してください

使用権限

USE CATALOGUSE SCHEMA は使用特権です。 通常、使用特権は、階層内のオブジェクトとその子オブジェクトを操作するための前提条件です。

カタログ内の任意のオブジェクトを扱うには、カタログ上の USE CATALOG 権限が必要であり、スキーマ内の任意のオブジェクトを扱うにはスキーマの USE SCHEMA 権限が必要です。 MANAGE権限でオブジェクトを管理する場合は例外で、使用権限要件が軽減されます。 MANAGEについては使用特権要件を参照してください。

たとえば、テーブル、ビュー、ボリューム、または関数に対してほとんどの操作を実行するには、次のものが必要です。

  1. 親カタログの USE CATALOG
  2. 親スキーマの USE SCHEMA
  3. 操作の特定の特権 ( SELECTMODIFYEXECUTEなど)

3 つすべてが必要です。 親オブジェクトにSELECTまたはUSE CATALOGがない場合は、テーブルに対するUSE SCHEMA特権だけでは読み取りできません。

使用特権は、上位レベルの管理者にとって重要なアクセス制御メカニズムを提供します。 たとえば、テーブル所有者が他のユーザーとテーブルを共有する場合でも、それらのユーザーは親オブジェクトに対する USE CATALOG 権限と USE SCHEMA 権限がないとテーブルにアクセスできません。 カタログとスキーマの所有者、または MANAGE 特権を持つユーザーのみがこれらの使用権限を付与できるため、テーブル所有者は承認された境界外のアクセス権を付与できなくなります。

使用特権の要件 MANAGE

MANAGE権限は使用権限要件を軽減しています。 MANAGEを行使するには、MANAGEが付与されるレベルの使用権限は必要ありません。カタログ上のMANAGEはそのカタログでのUSE CATALOGを必要としませんし、スキーマ上のMANAGEもそのスキーマでのUSE SCHEMAを必要としません。 使用権限が必要なのは、MANAGEを持つレベルより厳密に上位のコンテナレベルのみであり、そのレベル自体やそれより下位のレベルではありません。 それぞれの上位レベルでは、 USE CATALOGUSE SCHEMA、あるいは所有権や、 MANAGEで要件を満たすことができます。 コンテナ上の MANAGE はその子オブジェクトすべてに継承されるため、 MANAGE をより高いレベルで保持すると、その下の使用権限は必要ありません。 例えば次が挙げられます。

  • MANAGE カタログ上では使用権限は必要ありません。 カタログやその中のスキーマ、テーブル、その他のオブジェクトを USE CATALOGUSE SCHEMAなしで管理できます。
  • MANAGE スキーマ上では親カタログの USE CATALOG (または所有権や MANAGE )が必要ですが、スキーマ上で USE SCHEMA 必要はありません。
  • テーブル、ビュー、ボリューム、関数などの非コンテナー オブジェクトに対する MANAGE には、親カタログに対する USE CATALOG と、親スキーマに対する USE SCHEMA が必要です(または、いずれか一方の親に対する所有権または MANAGE)。

この削減は、MANAGEが提供するメタデータ機能およびMANAGEのようなREAD METADATAの子権限にのみ適用されます。 SELECTMODIFYなどのデータアクセス権限は、USE CATALOGを持つユーザーであってもUSE SCHEMAMANAGEが必要です。 MANAGE許可されている内容については、「MANAGE特権」をご覧ください。

次の表は、一般的な操作とその必要な特権を示しています。

Operation 必要な特権
テーブルまたはビューからデータを読み取る USE CATALOGカタログで、USE SCHEMAスキーマで、SELECTテーブルまたはビューで
テーブルにデータを書き込む カタログの USE CATALOG、スキーマの USE SCHEMA、テーブルの MODIFY
カタログにスキーマを作成する カタログの USE CATALOG、カタログの CREATE SCHEMA
スキーマにテーブルを作成する カタログの USE CATALOG、スキーマの USE SCHEMA、スキーマ (またはカタログ レベルでの付与の場合はカタログ) の CREATE TABLE
関数の実行 カタログのUSE CATALOG、スキーマのUSE SCHEMA、関数のEXECUTE
ボリュームからファイルを読み取る カタログUSE CATALOGで、スキーマUSE SCHEMAで、ボリュームREAD VOLUME
カタログの管理(権限付与、所有権移転、削除) MANAGE カタログ上(使用権限不要)
スキーマの管理(権限付与、所有権移転、削除) カタログの USE CATALOG、スキーマの MANAGE
テーブル、ビュー、ボリューム、関数の管理(権限付与、所有権移転、削除) USE CATALOGカタログ上、USE SCHEMAスキーマ上、MANAGEオブジェクト上

ALL PRIVILEGES 動作

ALL PRIVILEGES は、 Azure Databricks が個々の特権を明示的に付与することなく、特定のオブジェクトの種類に適用されるすべての特権を意味します。 例えば次が挙げられます。

  • ALL PRIVILEGES は、 SELECTMODIFY、および APPLY TAGを実行する機能を意味します。
  • ALL PRIVILEGES ボリューム上では、 READ VOLUMEWRITE VOLUME、および APPLY TAGを実行する機能を意味します。
  • ALL PRIVILEGES スキーマでは、すべてのスキーマ レベルの特権が意味されます。
  • ALL PRIVILEGES は、カタログ レベルのすべての特権を意味します。

ALL PRIVILEGES EXTERNAL USE SCHEMAEXTERNAL USE LOCATIONMANAGEREAD METADATAの特権は含まれていません。

ALL PRIVILEGESの評価と取り消しの方法の詳細については、すべての特権を参照してください。

MANAGE特権

MANAGE権限を使用すると、ユーザーは所有者にならずに、オブジェクトの管理、所有権の譲渡、削除を行えます。 MANAGEは所有権に似ていますが、いくつかの重要な違いがあります。 所有権とMANAGE特権を参照してください。

MANAGEを行使するには、MANAGEが付与されるオブジェクト上の親コンテナに対して適切な使用権限が必要ですが、そのオブジェクト自体には権限が与えられません。 例えば、カタログ上の MANAGE は使用権限を一切必要としません。 詳細は「MANAGEの使用権限要件」を参照してください。

コンテナー オブジェクトに MANAGE が付与されている場合、ユーザーはすべての子オブジェクトに対して MANAGE も取得します。

詳細については、「 管理」を参照してください。

BROWSE特権

BROWSE を使用すると、基になるデータへのアクセスを許可することなく、オブジェクトを検出し、メタデータを表示できます。 BROWSEを持つユーザーは、オブジェクトが存在することを確認し、その名前、説明、タグを表示し、USE CATALOGUSE SCHEMAを必要とせずに、オブジェクトへのアクセスを要求できます。

BROWSE はカタログ レベルで付与され、そのカタログ内のすべてのオブジェクトに適用されます。 Databricks では、組織全体でデータを検出できるように、カタログの BROWSEAll account users グループに付与することをお勧めします。

詳細については、BROWSE を参照してください。

複合特権と子供特権

一部の特権は複合子関係を通じて関連しています。 複合特権は幅広い能力群を与え、その子権限それぞれがそのサブセットの能力を与えます。 チャイルド特権は、複合特権の一部を委任できますが、完全な権限を与えるわけではありません。

複合特権および子供特権は独立して付与・取り消されます。 複合特権を付与しても子どもの特権は認められず、複合特権の取り消しは明示的に与えられた子ども特権を失わせることではありません。

以下は複合特権および子ども特権の例です。

  • MANAGE これは複合的な特権です。 READ METADATA MANAGEの子であり、オブジェクトのメタデータに対して読み取り専用の可視性を提供しますが、MANAGEに含まれる修正や管理機能は含まれません。 詳細は メタデータを読んでください。
  • MODIFY は複合特権であり、 INSERTUPDATEDELETE (ベータ)がその子です。 それぞれが MODIFY が提供する書き込みアクセスのサブセットを付与します。 きめ細かな DML 権限を参照してください。

所有権

Unity Catalog 内のセキュリティ保護可能なオブジェクトのそれぞれに所有者が存在します。 所有者には、ユーザー、サービス プリンシパル、またはグループを指定できます。 オブジェクトを作成するプリンシパルが、その最初の所有者になります。

所有権には、Unity カタログに特別な示しがあります。 オブジェクトの所有者は、所有するオブジェクトに対してすべての機能を自動的に実行できます。 ただし、Azure Databricks は、 ALL PRIVILEGES 特権を所有者に明示的に付与しません。 つまり、Databricks API でパーミッションを一覧表示する際や コマンドを使用する際には、 が返されることはありません。

所有権は Unity カタログで下位に継承されません。 ただし、オブジェクトの所有者には、すべての子オブジェクトを自動的に管理する機能があります。 たとえば、カタログを所有している場合、カタログ内の子スキーマは自動的に所有されませんが、すべての子スキーマを管理できます。 明示的に ALL PRIVILEGESを持たずにオブジェクトのすべての機能を持つ所有者と同様に、Azure Databricks では、この場合、 MANAGE 特権も明示的に付与されません。

オブジェクトの所有者は、権限の付与と取り消し、所有権の譲渡、オブジェクトの削除など、オブジェクトに対して他の重要な操作を実行できます。

誤ったデータ流出を回避するために、スキーマ所有者は既定で EXTERNAL USE SCHEMA 特権を持っず、外部の場所の所有者は既定で EXTERNAL USE LOCATION 特権を持っていません。 「Unity Catalog への外部データ アクセスを有効にする」を参照してください。

要約すると、オブジェクトの所有者は次の操作を行うことができます。

能力 Description
すべてのオブジェクト機能 所有者は、所有するオブジェクトのすべての機能を自動的に持ちます。 これは機能的には ALL PRIVILEGESと同じですが、Azure Databricks は所有者に ALL PRIVILEGES を明示的に割り当てません。
子オブジェクトの管理 所有者は、すべての子オブジェクトを自動的に管理する機能を取得します。 これは機能的には、すべての子オブジェクトに対する MANAGE 特権を持つことと同じですが、Azure Databricks では、 MANAGE 特権が所有者に明示的に割り当てられません。
アクセス許可の付与と取り消し 所有者は、オブジェクトに対する権限をユーザーとグループに付与および取り消すことができます
所有権の移転 所有者はオブジェクトの所有権を別のプリンシパルに譲渡できます
オブジェクトを削除する 所有者は自分が所有するオブジェクトを削除できます

所有権を表示および譲渡する方法については、「オブジェクト所有権の 管理」を参照してください。

所有権と MANAGE 特権の比較

MANAGE権限は、オブジェクトに対する権限を付与および取り消す権限をユーザーに付与します。 オブジェクトに対するすべての権限がユーザーに付与されるわけではありません。 ただし、 MANAGE を持つユーザーは、 SELECTなどのデータ アクセス権限を明示的に付与できます。

これに対し、オブジェクトの所有者は、既定ですべての機能をオブジェクトに対して持っています。 所有権は子オブジェクトに対して下位に継承されないため、所有者は引き続きそれらの子オブジェクトに対する明示的な許可を必要とします。

使用権限の要件は両者で同じです。所有者と MANAGE を持つユーザーはオブジェクトの親コンテナに対して適切な使用権限が必要ですが、オブジェクト自体には必要ありません。 MANAGEについては使用特権要件を参照してください。

次の表は、所有権と MANAGE 権限の主な違いをまとめたものです。

能力 オーナー MANAGE 特権
オブジェクトのすべての機能 はい。すべての機能が 暗黙的です。 これは、明示的に ALL PRIVILEGESがあることとは異なります。 所有権を参照してください。 いいえ。権限は個別に付与する必要があります。 MANAGEを持つユーザーは、これらの特権を自分自身に付与できます。
オブジェクトに対する権限の付与と取り消し イエス イエス
所有権の移転 イエス イエス
オブジェクトを削除する イエス イエス
子オブジェクトを管理する機能 はい。子オブジェクトの管理機能は 暗黙的です所有権を参照してください。 はい。 MANAGE 特権は、子オブジェクトに対して明示的に付与されます。
使用特権が必要です いいえ MANAGEが付与されるオブジェクト上の親コンテナには適切な使用権限が必要ですが、オブジェクト自体には付与されません。 MANAGE カタログ上では使用権限は必要ありません。
プリンシパルの数 1 つの主体 (ユーザー、サービスプリンシパル、またはグループ) のみ 複数のプリンシパルに付与可能

誤った特権エスカレーションを回避するために、 ALL PRIVILEGES 特権には MANAGE 特権は含まれません。

特権の継承

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

特権の継承は、Unity カタログのアクセス許可モデルの重要な機能です。 親オブジェクトに対する権限を付与すると、その権限は現在および将来のすべての子オブジェクトに自動的に適用されます。 これにより、行う必要がある個々の許可の数を減らすことで、アクセス管理が簡素化されます。

権限は、オブジェクト モデル階層を通じて下位に継承されます。

  • カタログに付与された権限は、そのカタログ内のすべてのスキーマ、およびそれらのスキーマ内のすべてのテーブル、ビュー、ボリューム、および関数に適用されます。
  • スキーマに付与された権限は、そのスキーマ内のすべてのテーブル、ビュー、ボリューム、および関数に適用されます。

たとえば、カタログに対する SELECT 権限をユーザーに付与した場合、そのユーザーはそのカタログ内のすべてのテーブルとビューを読み取ることができます (適切な USE CATALOGUSE SCHEMA の使用権限を持ちます)。

Important

メタストアに付与された権限は、子オブジェクトに継承されません。 メタストア レベルでは、メタストア内のデータへのアクセスではなく、 CREATE CATALOGCREATE EXTERNAL LOCATIONなどのメタストア スコープの操作を制御できます。

READ METADATA特権は例外です。 メタストアで付与されると、 READ METADATA はメタストア内のすべてのオブジェクトに継承され、使用権限(USE CATALOG または USE SCHEMA)は必要ありません。 詳細は メタデータを読んでください。

所有権は Unity カタログで下位に継承されません。 オブジェクトの所有者として、そのオブジェクトに対するすべての権限のみが自動的に付与されます。 オブジェクトの下に作成された子オブジェクトの所有権を自動的に所有するわけではありません。 ただし、新規および既存のすべての子オブジェクトに対する MANAGE 特権は自動的に取得されます。

継承の例

カタログ レベルで SELECTUSE CATALOG、および USE SCHEMAfinance_team グループに付与するとします。

GRANT USE CATALOG, USE SCHEMA, SELECT ON CATALOG sales TO finance_team;

この許可により、 finance_team グループは次のことができます。

  • sales カタログにアクセスする
  • カタログ内のすべてのスキーマにアクセスする
  • カタログ内のすべての現在および将来のテーブルとビューからデータを読み取ります

カタログ レベルで CREATE TABLEUSE CATALOG、および USE SCHEMAdata_engineers グループに付与するとします。

GRANT USE CATALOG, USE SCHEMA, CREATE TABLE ON CATALOG analytics TO data_engineers;

この許可により、 data_engineers グループは次のことができます。

  • analytics カタログにアクセスする
  • カタログ内のすべてのスキーマにアクセスする
  • カタログ内の現在または将来のスキーマにテーブルを作成する

権限を付与および取り消す方法については、「権限の 表示、付与、取り消し」を参照してください。