Unity Catalogのデータガバナンスの中核は権限制御です。カタログ・スキーマ・テーブル・ビュー・関数・ボリュームなどの セキュアブルオブジェクトに対して、「誰が何をできるか」をGRANT/REVOKEで宣言的に管理します。 従来のHive Metastore(テーブルACL)と異なり、Unity Catalogでは階層的な権限継承と ワークスペースを横断した一元管理が可能です。
この記事では、権限モデルの全体像、GRANT/REVOKE構文、権限種類の比較表、継承の仕組み、 セキュアブルオブジェクト一覧、そして実務のベストプラクティスを整理します。
Unity Catalogの権限モデルは、セキュアブルオブジェクト(保護対象)、プリンシパル(権限の付与先)、 プリビレッジ(許可される操作)の3要素で構成されます。
権限はANSI SQL標準のGRANT/REVOKE構文で管理します。 Databricks独自の拡張としてUSE CATALOG、USE SCHEMA、CREATE VOLUME等があります。
-- テーブルへのSELECT権限を付与
GRANT SELECT ON TABLE prod.silver.orders TO `data-analysts`;
-- スキーマ配下の全テーブルにSELECTを付与(継承で適用)
GRANT SELECT ON SCHEMA prod.silver TO `data-analysts`;
-- カタログのUSE権限を付与(名前空間のブラウズに必須)
GRANT USE CATALOG ON CATALOG prod TO `data-analysts`;
GRANT USE SCHEMA ON SCHEMA prod.silver TO `data-analysts`;
-- 権限の取り消し
REVOKE SELECT ON TABLE prod.silver.orders FROM `data-analysts`;
-- 付与済み権限の確認
SHOW GRANTS ON TABLE prod.silver.orders;
SHOW GRANTS TO `data-analysts`;プリンシパル名はバッククォートで囲みます。グループ名にハイフンが含まれる場合もバッククォートが必要です。
| 権限 | 対象オブジェクト | 許可される操作 |
|---|---|---|
| USE CATALOG | Catalog | カタログ内のスキーマ一覧を閲覧 |
| USE SCHEMA | Schema | スキーマ内のテーブル・ビュー一覧を閲覧 |
| SELECT | Table / View | データの読み取り(SELECT文の実行) |
| MODIFY | Table | データの追加・更新・削除(INSERT/UPDATE/DELETE/MERGE) |
| CREATE TABLE | Schema | スキーマ内にテーブルを作成 |
| CREATE SCHEMA | Catalog | カタログ内にスキーマを作成 |
| CREATE VOLUME | Schema | スキーマ内にボリュームを作成 |
| CREATE FUNCTION | Schema | スキーマ内に関数を作成 |
| READ VOLUME | Volume | ボリューム内のファイルを読み取り |
| WRITE VOLUME | Volume | ボリュームへのファイル書き込み |
| EXECUTE | Function | 関数の実行 |
| ALL PRIVILEGES | すべて | 対象オブジェクトに対するすべての権限 |
Unity Catalogの権限は上位オブジェクトから下位オブジェクトに自動的に継承されます。 以下に階層と継承の流れを示します。
Metastore
└── Catalog ← GRANT SELECT ON CATALOG → 配下の全Schema/Table/Viewに適用
└── Schema ← GRANT SELECT ON SCHEMA → 配下の全Table/Viewに適用
├── Table ← GRANT SELECT ON TABLE → このテーブルのみ
├── View
├── Volume
└── FunctionカタログレベルでSELECTを付与すると、将来作成されるスキーマやテーブルにも自動適用されます。 「今後追加されるテーブルにも権限を維持したい」場合はスキーマまたはカタログレベルの付与が効率的です。
Unity CatalogにはDENY(拒否)の仕組みがありません。 特定のテーブルだけ除外したい場合はカタログ/スキーマレベルの付与を避け、 テーブル単位で個別にGRANTする設計にします。
| セキュアブル | 説明 | 主な権限 |
|---|---|---|
| Metastore | 最上位のコンテナ。リージョン内で一意 | CREATE CATALOG, USE PROVIDER |
| Catalog | スキーマのコンテナ。環境分離の単位 | USE CATALOG, CREATE SCHEMA |
| Schema | テーブル・ビュー・関数のコンテナ | USE SCHEMA, CREATE TABLE/VIEW/FUNCTION/VOLUME |
| Table | Managed / External テーブル | SELECT, MODIFY |
| View | SQLビュー(動的データマスキングにも活用) | SELECT |
| Volume | 非テーブルファイルの管理単位 | READ VOLUME, WRITE VOLUME |
| Function | UDF・ストアドプロシージャ | EXECUTE |
| External Location | クラウドストレージパスのマッピング | CREATE EXTERNAL TABLE, READ FILES, WRITE FILES |
| Storage Credential | クラウドストレージの認証情報 | CREATE EXTERNAL LOCATION |
-- 動的ビューによるRow Level Security
CREATE OR REPLACE VIEW prod.silver.orders_restricted AS
SELECT *
FROM prod.silver.orders
WHERE region = CASE
WHEN is_member('apac-team') THEN 'APAC'
WHEN is_member('emea-team') THEN 'EMEA'
ELSE region -- admin は全リージョン閲覧可
END;
GRANT SELECT ON VIEW prod.silver.orders_restricted TO `all-users`;すべてのセキュアブルオブジェクトにはオーナーが存在します。 オーナーはそのオブジェクトに対するすべての権限を持ち、他のプリンシパルへの権限付与も可能です。 テーブルを作成したユーザーがデフォルトオーナーになります。
-- オーナーの変更
ALTER TABLE prod.silver.orders SET OWNER TO `data-engineering-team`;
-- オーナーの確認
DESCRIBE TABLE EXTENDED prod.silver.orders;
-- Owner列にオーナーが表示されるData Engineer Associate / Professional
問題 1
データアナリストがprod.silver.ordersテーブルにSELECTクエリを実行したところ、「TABLE_OR_VIEW_NOT_FOUND」エラーが発生した。SHOW GRANTS TO `analyst-user`を確認すると、テーブルへのSELECT権限は付与されている。最も可能性が高い原因はどれか。
正解: A
Unity Catalogではテーブルにアクセスするためにテーブル自体のSELECTに加え、カタログのUSE CATALOGとスキーマのUSE SCHEMAが必要です。これらが不足すると名前解決ができず TABLE_OR_VIEW_NOT_FOUND エラーになります。テーブルフォーマットやCompute種類は権限エラーの原因にはなりません。CHECK制約はSELECTには影響しません。
USE CATALOGとUSE SCHEMAの権限は何を許可しますか?
USE CATALOGはカタログ内のスキーマ一覧を閲覧する権限、USE SCHEMAはスキーマ内のテーブルやビューの一覧を閲覧する権限です。いずれもデータへのアクセス権ではなく「名前空間の中身を見る」権限です。テーブルの中身を読むにはSELECT権限が別途必要で、USE CATALOG + USE SCHEMA + SELECTの3つが揃って初めてクエリが通ります。
権限の継承はどう動きますか?
Unity Catalogの権限は上位オブジェクトから下位オブジェクトに継承されます。カタログレベルでSELECTをGRANTすると、そのカタログ配下のすべてのスキーマ・テーブルにSELECTが適用されます。ただしDENYは存在せず、継承を部分的にブロックする仕組みはありません。特定テーブルだけ除外したい場合は、カタログレベルの付与を避けてスキーマ/テーブル単位で個別にGRANTします。
GRANT SELECTだけでクエリが成功しない場合の原因は?
USE CATALOGとUSE SCHEMAの権限が不足している可能性が高いです。Unity Catalogでは階層的なアクセス制御を採用しており、テーブルにSELECTがあっても、そのテーブルが属するカタログとスキーマのUSE権限がなければ名前解決ができずエラーになります。GRANT USE CATALOG ON CATALOG <catalog> TO <principal>とGRANT USE SCHEMA ON SCHEMA <schema> TO <principal>を追加してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...