Databricks

Databricks Unity Catalogの権限設計ガイド|GRANT/REVOKE・継承・セキュアブル一覧

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Unity Catalogのデータガバナンスの中核は権限制御です。カタログ・スキーマ・テーブル・ビュー・関数・ボリュームなどの セキュアブルオブジェクトに対して、「誰が何をできるか」をGRANT/REVOKEで宣言的に管理します。 従来のHive Metastore(テーブルACL)と異なり、Unity Catalogでは階層的な権限継承と ワークスペースを横断した一元管理が可能です。

この記事では、権限モデルの全体像、GRANT/REVOKE構文、権限種類の比較表、継承の仕組み、 セキュアブルオブジェクト一覧、そして実務のベストプラクティスを整理します。

権限モデル概要

Unity Catalogの権限モデルは、セキュアブルオブジェクト(保護対象)、プリンシパル(権限の付与先)、 プリビレッジ(許可される操作)の3要素で構成されます。

  • セキュアブルオブジェクト: Metastore / Catalog / Schema / Table / View / Function / Volume / External Location / Storage Credential
  • プリンシパル: ユーザー / グループ / サービスプリンシパル
  • プリビレッジ: SELECT / MODIFY / CREATE TABLE / USE CATALOG / USE SCHEMA 等

権限はANSI SQL標準のGRANT/REVOKE構文で管理します。 Databricks独自の拡張としてUSE CATALOG、USE SCHEMA、CREATE VOLUME等があります。

GRANT / REVOKE 構文

-- テーブルへの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 CATALOGCatalogカタログ内のスキーマ一覧を閲覧
USE SCHEMASchemaスキーマ内のテーブル・ビュー一覧を閲覧
SELECTTable / Viewデータの読み取り(SELECT文の実行)
MODIFYTableデータの追加・更新・削除(INSERT/UPDATE/DELETE/MERGE)
CREATE TABLESchemaスキーマ内にテーブルを作成
CREATE SCHEMACatalogカタログ内にスキーマを作成
CREATE VOLUMESchemaスキーマ内にボリュームを作成
CREATE FUNCTIONSchemaスキーマ内に関数を作成
READ VOLUMEVolumeボリューム内のファイルを読み取り
WRITE VOLUMEVolumeボリュームへのファイル書き込み
EXECUTEFunction関数の実行
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
TableManaged / External テーブルSELECT, MODIFY
ViewSQLビュー(動的データマスキングにも活用)SELECT
Volume非テーブルファイルの管理単位READ VOLUME, WRITE VOLUME
FunctionUDF・ストアドプロシージャEXECUTE
External LocationクラウドストレージパスのマッピングCREATE EXTERNAL TABLE, READ FILES, WRITE FILES
Storage Credentialクラウドストレージの認証情報CREATE EXTERNAL LOCATION

権限設計のベストプラクティス

  • ユーザーへの直接GRANTを避け、グループ経由で付与する(SCIMプロビジョニングと連携しやすい)
  • USE CATALOG / USE SCHEMAを忘れずに付与する(SELECTだけでは名前解決できない)
  • 本番カタログへのMODIFYはETL用サービスプリンシパルのみに制限する
  • 開発者にはdev/stagingカタログへのALL PRIVILEGES、prodカタログへはSELECTのみ付与する
  • SHOW GRANTSで定期的に権限を棚卸しし、不要な権限を削除する
  • 動的ビュー(current_user()やis_member())でRow/Columnレベルの制御を実装する
-- 動的ビューによる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`;

OWNERSHIPの概念

すべてのセキュアブルオブジェクトにはオーナーが存在します。 オーナーはそのオブジェクトに対するすべての権限を持ち、他のプリンシパルへの権限付与も可能です。 テーブルを作成したユーザーがデフォルトオーナーになります。

-- オーナーの変更
ALTER TABLE prod.silver.orders SET OWNER TO `data-engineering-team`;

-- オーナーの確認
DESCRIBE TABLE EXTENDED prod.silver.orders;
-- Owner列にオーナーが表示される

試験で問われるポイント

  • USE CATALOG + USE SCHEMA + SELECT の3権限がクエリ実行に必要
  • 権限は上位から下位に継承される(カタログ → スキーマ → テーブル)
  • DENYは存在しない
  • オーナーはALL PRIVILEGES相当の権限を持つ
  • 動的ビューでRow/Columnレベルセキュリティを実装する方法
  • SHOW GRANTS構文での権限確認方法

問題で確認

Data Engineer Associate / Professional

問題 1

データアナリストがprod.silver.ordersテーブルにSELECTクエリを実行したところ、「TABLE_OR_VIEW_NOT_FOUND」エラーが発生した。SHOW GRANTS TO `analyst-user`を確認すると、テーブルへのSELECT権限は付与されている。最も可能性が高い原因はどれか。

  1. prodカタログへのUSE CATALOGまたはsilverスキーマへのUSE SCHEMA権限が不足している
  2. テーブルがDelta形式ではなくParquet形式で保存されている
  3. アナリストのクラスタがServerless Computeで起動されている
  4. テーブルにCHECK制約が設定されており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>を追加してください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.