Unity Catalog privileges and securable objects | Databricks on AWS [2022/12/14時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
本書ではUnity Catalogにおける権限モデルを説明します。Hiveメタストアとこのモデルの違いについてはUnity CatalogとレガシーHiveメタストアを操作するをご覧ください。
注意
本書では権限モデルバージョン1.0におけるUnity Catalog権限と継承モデルを参照します。パブリックプレビュー期間にUnity Catalogメタストアを作成している場合には、Upgrade to privilege inheritanceに従うことで、権限モデルバージョン1.0にアップグレードすることができます。
権限の管理
権限はメタストア管理者、オブジェクトのオーナー、オブジェクトを格納するカタログやスキーマのオーナーによって許可されます。SQLコマンド、Unity Catalog CLI、データエクスプローラを用いてメタストアのオブジェクトに対する権限を管理することができます。権限を管理するためにどのようにデータエクスプローラを使うのかに関してはManage Unity Catalog permissions in Data Explorerをご覧ください。
SQLで権限を管理するには、ノートブックやDatabricks SQLのクエリーエディタで以下の構文を用いてGRANTやREVOKE文を使用します。
GRANT privilege_type ON securable_object TO principal
ここでは:
-
privilege_typeはUnity Catalogの権限のタイプです。 -
securable_objectはUnity Catalogにおけるセキュリティ保護可能オブジェクトです。 -
principalはユーザー、サービスプリンシパル(applicationIdの値で表現されます)、グループです。
例えば、以下のコマンドはmainという親カタログにあるdefaultというスキーマにテーブルを作成する権限をfinanceというグループに許可します。
GRANT CREATE TABLE ON SCHEMA main.default TO finance;
SQLコマンドを用いた権限の付与に関しては、Privileges and securable objects in Unity Catalogをご覧ください。
また、Databricks Terraformやdatabricks_grantsを用いて権限を管理することもできます。
Unity Catalogにおけるセキュリティ保護可能オブジェクト
セキュリティ保護可能オブジェクトはUnity Catalogメタストアで定義されるプリンシパルに権限を付与可能なオブジェクトです。Unity Catalogにおけるセキュリティ保護可能オブジェクトは階層になっています。

セキュリティ可能オブジェクトは:
-
メタストア: メタデータのトップレベルのコンテナです。それぞれのUnity Catalogメタストアはデータを整理するために3レベルの名前空間(
catalog.schema.table)を提供します。 - カタログ: オブジェクト階層の最初のレイヤーであり、データアセットを整理するために使用されます。
- スキーマ: データベースとも呼ばれるスキーマはオブジェクト階層の2番目のレイヤーでありテーブルとビューを格納します。
- テーブル: オブジェクト階層の最下層にあるテーブルは外部テーブル(お使いのクラウドストレージの外部ロケーションに格納されます)あるいはマネージドテーブル(Databricksで明示的に作成したクラウドストレージのストレージコンテナに格納されます)となります。
- ビュー: スキーマに格納される1つ以上のテーブルから作成される読み取り専用のオブジェクトです。
- 外部ロケーション: Unity Catalogメタストアに含まれるストレージ資格情報とクラウドストレージパスへのリファレンスを格納するオブジェクトです。
- ストレージ資格情報: Unity Catalogメタサウトアに含まれるクラウドストレージへのアクセスを提供する長期のクラウド資格情報をカプセル化するオブジェクトです。
- 関数: スキーマに格納されるユーザー定義関数です。
- 共有: Delta Sharingを用いた共有を意図したテーブルに対する論理的グループです。共有はUnity Catalogメタストアに格納されます。
- 受信者: Delta Sharingを用いてデータを共有できる組織、ユーザーグループを識別するオブジェクトです。これらのオブジェクトはUnity Catalogメタストアに格納されます。
- 提供者: Delta Sharingを用いたデータ共有を可能にする組織を表現するオブジェクトです。これらのオブジェクトはUnity Catalogメタストアに格納されます。
継承モデル
Unity Catalogにおけるセキュリティ可能オブジェクトは階層型であり、権限は下流に継承されます。権限が継承される最上位のオブジェクトはカタログです。これは、カタログやスキーマに付与した権限は自動で、現在かつ将来においてカタログ、スキーマに含まれるすべてのオブジェクトに権限が付与されることを意味します。Unity Catalogメタストアに付与された権限は継承されません。
例えば、以下のコマンドはカタログmainのすべてのスキーマに存在するすべてのテーブル、ビューに対するSELECT 権限をfinanceグループに付与します:
GRANT SELECT ON CATALOG main TO finance;
同様に、アクセスのスコープを小さくするためにスキーマに対する権限付与を行うこともできます。
GRANT SELECT ON SCHEMA main.default TO finance;
継承モデルはデータに対するデフォルトのアクセスルールをセットアップする簡単な方法を提供します。例えば、以下のコマンドによって、機械学習チームはスキーマにテーブルを作成し、他の人が作成したテーブルを読み込めるようになります。
CREATE CATALOG ml;
CREATE SCHEMA ml.team_sandbox;
GRANT USE_CATALOG ON CATALOG ml TO ml_team;
GRANT USE_SCHEMA ON SCHEMA ml.team_sandbox TO ml_team;
GRANT CREATE TABLE ON SCHEMA ml.team_sandbox TO ml_team;
GRANT SELECT ON SCHEMA ml.team_sandbox TO ml_team;
Unity Catalogの権限タイプ
以下のテーブルでは、カタログのそれぞれのセキュリティ可能オブジェクトに対してどの権限タイプが適用されるのかをまとめています。
| セキュリティ可能オブジェクト | 権限 |
|---|---|
| メタストア | CREATE CATALOG, CREATE EXTERNAL LOCATION, CREATE RECIPIENT, CREATE SHARE, CREATE PROVIDER |
| カタログ |
ALL PRIVILEGES, CREATE SCHEMA, USE CATALOG以下の権限タイプはカタログ内のセキュリティ可能オブジェクトに適用されます。カタログに存在する適切な現在かつ将来のオブジェクトに適用するために、カタログレベルでこれらの権限を付与することができます。 CREATE FUNCTION, CREATE TABLE, CREATE VIEW, EXECUTE, MODIFY, SELECT, USE SCHEMA
|
| スキーマ |
ALL PRIVILEGES, CREATE FUNCTION, CREATE TABLE, CREATE VIEW, USE SCHEMA以下の権限タイプはスキーマ内のセキュリティ可能オブジェクトに適用されます。スキーマに存在する適切な現在かつ将来のオブジェクトに適用するために、スキーマレベルでこれらの権限を付与することができます。 EXECUTE, MODIFY, SELECT
|
| テーブル | ALL PRIVILEGES, SELECT, MODIFY |
| ビュー | ALL PRIVILEGES, SELECT |
| 外部ロケーション | ALL PRIVILEGES, CREATE EXTERNAL TABLE, READ FILES, WRITE FILES, CREATE MANAGED STORAGE |
| ストレージ資格情報 | ALL PRIVILEGES, CREATE EXTERNAL LOCATION, CREATE EXTERNAL TABLE, READ FILES, WRITE FILES |
| 関数 | ALL PRIVILEGES, EXECUTE |
| 共有 |
SELECT (RECIPIENTに付与することができます) |
| 受信者 | None |
| 提供者 | None |
メタストアで権限を管理する際、SQLコマンドにメタストア名を含めてはいけません。Untiy Catalogはワークスペースにアタッチされたメタストアの権限を付与、剥奪します。例えば、以下のコマンドはワークスペースにアタッチされたメタストアでカタログを作成する権限をengineeringというグループに付与します。
GRANT CREATE CATALOG ON METASTORE TO engineering
ALL PRIVILEGES
適用可能なオブジェクトタイプ: CATALOG, EXTERNAL LOCATION, STORAGE CREDENTIAL, SCHEMA, FUNCTION, TABLE, VIEW
明示的に指定することなしに、セキュリティ可能オブジェクトとその子供の部ジェクトに適用可能なすべての権限を付与、剥奪するために使用されます。これは、アクセス権チェックが行われた際に利用可能なすべてのアクセス権を展開します。
注意
この権限は階層の高次レベルで適用された際にはパワフルなものとなります。例えば、ALL PRIVILEGES ON CATALOG main TO analystsはカタログのすべてのオブジェクト(スキーマ、テーブル、ビュー、関数)に対するすべての権限をアナリストチームに付与します。
CREATE CATALOG
適用可能なオブジェクトタイプ: Unity Catalogメタストア
Unity Catalogメタストアでのカタログの作成を許可します。
CREATE EXTERNAL LOCATION
適用可能なオブジェクトタイプ: Unity Catalogメタストア, STORAGE CREDENTIAL
ストレージ資格情報に適用された際、ストレージ資格上を用いて外部ロケーションを作成することを許可します。また、この権限はメタストアに外部ロケーションを作成することを許可します。
CREATE EXTERNAL TABLE
適用可能なオブジェクトタイプ: EXTERNAL LOCATION, STORAGE CREDENTIAL
外部ロケーションやストレージ資格情報を用いて、お使いのクラウドテナントに直接外部テーブルを作成することを許可します。ストレージ資格情報ではなく外部ロケーションにこの権限を付与することをお勧めします(これは、パスのスコープであり、あなたのクラウドテナントでユーザーが外部テーブルを作成できる場所をよりコントロールできるためです)。
CREATE FUNCTION
適用可能なオブジェクトタイプ: SCHEMA
スキーマに関数を作成することを許可します。権限は継承されるので、CREATE FUNCTIONはカタログで許可することもでき、カタログの現在と将来のスキーマで関数を作成できることを許可することができます。
ユーザーは親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している必要があります。
CREATE MANAGED STORAGE
適用可能なオブジェクトタイプ: EXTERNAL LOCATION
カタログ、スキーマレベルでマネージドテーブルを格納するロケーションを指定することを許可し、メタストアのデフォルトルートストレージを上書きします。
CREATE PROVIDER
適用可能なオブジェクトタイプ: Unity Catalogメタストア
メタストアでDelta Sharing提供者オブジェクトの作成を許可します。提供者はDelta Sharingを用いてデータを共有できる組織やユーザーグループを特定します。提供者の作成は受信者のDatabricksアカウントのユーザーによって実行されます。Share data securely using Delta Sharingをご覧ください。
CREATE RECIPIENT
適用可能なオブジェクトタイプ: Unity Catalogメタストア
メタストアでDelta Sharing受信者オブジェクトの作成を許可します。受信者はDelta Sharingを用いてデータが共有される組織やユーザーグループを特定します。受信者の作成は提供者のDatabricksアカウントのユーザーによって実行されます。Share data securely using Delta Sharingをご覧ください。
CREATE SCHEMA
適用可能なオブジェクトタイプ: CATALOG
スキーマの作成を許可します。また、ユーザーはカタログに対するUSE CATALOG権限が必要です。
CREATE SHARE
適用可能なオブジェクトタイプ: Unity Catalogメタストア
メタストアに共有の作成を許可します。共有はdelta Sharingを用いた共有を意図したテーブルの論理的グループです。
CREATE TABLE
適用可能なオブジェクトタイプ: SCHEMA
スキーマでテーブルを作成することを許可します。権限は継承されるので、カタログにCREATE TABLEを付与することができ、カタログの現在そして将来のスキーマでテーブルを作成することを許可します。
ユーザーは親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している必要があります。
CREATE VIEW
適用可能なオブジェクトタイプ: SCHEMA
スキーマでビューを作成することを許可します。権限は継承されるので、カタログにCREATE TABLEを付与することができ、カタログの現在そして将来のスキーマでビューを作成することを許可します。
ユーザーは親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している必要があります。
EXECUTE
適用可能なオブジェクトタイプ: FUNCTION
ユーザーが親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している場合には、ユーザー定義関数を呼び出すことを許可します。
権限は継承されるので、カタログやスキーマにEXECUTEを付与することができ、カタログやスキーマで現在そして将来の関数を実行することを許可します。
MODIFY
適用可能なオブジェクトタイプ: TABLE
ユーザーが親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している場合には、テーブルに対する追加、更新、削除を行うことを許可します。
権限は継承されるので、カタログやスキーマにMODIFYを付与することができ、カタログやスキーマで現在そして将来のテーブルにMODIFYを実行することを許可します。
READ FILES
適用可能なオブジェクトタイプ: EXTERNAL LOCATION, STORAGE CREDENTIAL
クラウドオブジェクトストレージから直接ファイルを読み込むことを許可します。ストレージ資格情報ではなく外部ロケーションにこの権限を付与することをお勧めします(これは、パスのスコープであり、あなたのクラウドテナントでユーザーがデータを読み込める場所をよりコントロールできるためです)。
SELECT
適用可能なオブジェクトタイプ: TABLE, VIEW, SHARE
テーブルやビューに適用される際には、ユーザーが親のカタログのUSE CATALOG権限と親のスキーマのUSE SCHEMA権限を有している場合には、テーブルやビューを参照することを許可します。共有に適用されると、受信者は共有を参照できるようになります。
権限は継承されるので、カタログやスキーマにSELECTを付与することができ、カタログやスキーマの現在そして将来のテーブルやビューにSELECTを実行することを許可します。
USE CATALOG
適用可能なオブジェクトタイプ: CATALOG
この権限はカタログ自身へのアクセスを許可しませんが、カタログ内のすべてのオブジェクトを操作する際に必要となります。例えば、テーブルからデータをselectするには、ユーザーは当該テーブルのSELECT権限と親のカタログに対するUSE CATALOG権限と親スキーマに対するUSE SCHEMA権限が必要となります。
これは、カタログのオーナーがそれぞれのスキーマやテーブルのオーナーが彼らが生成するデータをどこまで共有できるのかを制限できるようになるため有用です。例えば、別のユーザーにSELECTを許可したテーブルのオーナーは、親のカタログに対するUSE CATALOG権限と親のスキーマに対するUSE SCHEMA権限を付与しない限り、SELECTが付与されたユーザーはテーブルを読み込むことはできません。
USE SCHEMA
適用可能なオブジェクトタイプ: SCHEMA
この権限はスキーマ自身へのアクセスを許可しませんが、スキーマ内のすべてのオブジェクトを操作する際に必要となります。例えば、テーブルからデータをselectするには、ユーザーは当該テーブルのSELECT権限と親のカタログに対するUSE CATALOG権限と親スキーマに対するUSE SCHEMA権限が必要となります。
権限は継承されるので、カタログにUSE SCHEMA権限を付与することがd系、カタログの現在、将来のすべてのスキーマにおいてUSE SCHEMA権限が自動で付与されるようになります。
WRITE FILES
適用可能なオブジェクトタイプ: EXTERNAL LOCATION, STORAGE CREDENTIAL
クラウドオブジェクトストレージに直接ファイルを書き込むことを許可します。ストレージ資格情報ではなく外部ロケーションにこの権限を付与することをお勧めします(これは、パスのスコープであり、あなたのクラウドテナントでユーザーがデータを書き込める場所をよりコントロールできるためです)。