Unity Catalog での特権の管理
このページではUnity Catalogのセキュリティ保護可能なオブジェクトに対する権限の付与、取り消し、および検査の方法、ならびにオブジェクトの所有権の管理方法について説明します。 権限モデル、権限の継承、所有権に関する概念的な背景については、 「Unity Catalog 権限モデルの概念」を参照してください。
権限を管理できるのは誰ですか?
最初は、ユーザーはメタストア内のデータにアクセスできません。 Databricks アカウント管理者、ワークスペース管理者、およびメタストア管理者には、 Unity Catalogを管理するためのデフォルトの特権があります。 「Unity Catalog の管理者特権」を参照してください。
Unity Catalog内のセキュリティ保護可能なオブジェクトはすべて所有者が存在します。 オブジェクトの所有者は、そのオブジェクトに対するすべての権限を持ち、他のプリンシパルに権限を付与する権限も含まれます。所有者は、他のユーザーにオブジェクトに対するMANAGE権限を付与することができ、これによりユーザーはオブジェクトに対する権限を管理できるようになります。オブジェクトの所有権の管理を参照してください。
特権は、次のいずれかによって付与できます。
- オブジェクトの所有者。
- オブジェクトを含むカタログまたはスキーマの所有者。
- オブジェクトに対する
MANAGE権限を持つユーザー。 - メタストア管理者。
アカウント管理者は、メタストアで直接権限を付与することもできます。
ワークスペースカタログの権限
ワークスペースでUnity Catalogが自動的に有効になった場合、ワークスペースはデフォルトでメタストアにアタッチされ、メタストア内のワークスペースのワークスペースカタログが作成されます。ワークスペース管理者は、ワークスペースカタログのデフォルト所有者です。所有者は、ワークスペースカタログとすべての子オブジェクトに対する権限を管理できます。
すべてのワークスペース ユーザーは、ワークスペース カタログに対する USE CATALOG 権限を受け取ります。 ワークスペース ユーザーは、カタログ内のdefaultスキーマに対する USE SCHEMA、 CREATE TABLE、 CREATE VOLUME、 CREATE MODEL、 CREATE FUNCTION、および CREATE MATERIALIZED VIEW 特権も受け取ります。
詳細については、「Unity Catalogの自動有効化」を参照してください。
権限の表示、付与、取り消し
メタストア オブジェクトの特権は、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>;メタストアに対する特権を取り消す場合、ワークスペースにアタッチされているメタストアが想定されるため、メタストア名は含まれません。
オブジェクトの所有権を管理する
オブジェクトの所有者を表示する
カタログエクスプローラ または SQL ステートメントを使用して、オブジェクトの所有者を表示できます。
必要な権限 :オブジェクトまたはオブジェクトの親に対してBROWSE権限を持つユーザーは、オブジェクトの所有者を表示できます。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
カタログ、スキーマ、テーブル、ビュー、ボリューム、外部ロケーション、ストレージ認証情報などのオブジェクトを選択します。
オブジェクトへの移動方法は、オブジェクトによって異なります。カタログ、スキーマ、およびスキーマの内容(テーブルやボリュームなど)は、左側の カタログ ペインで選択できます。をクリックすると、外部ロケーションやDelta Sharing共有などの他のオブジェクトを見つけることができます。
カタログペインの上にある歯車アイコンをクリックし、メニューからオブジェクトカテゴリを選択します。
ほとんどのオブジェクトの場合、所有者はオブジェクト詳細ページの 「概要」 タブに表示されます。外部ロケーションなどの一部のオブジェクトについては、オブジェクト詳細ページの上部に表示されます。
ノートブックまたはSQLクエリ エディターで次のSQLコマンドを実行します。 プレースホルダー値を置き換えてください。
<securable-type>: セキュリティ保護可能なオブジェクトの種類。例えば、CATALOGまたはTABLEなど。<catalog>スキーマまたはスキーマの内容を表示している場合の親カタログ。<schema>: テーブルやビューなどのスキーマの内容を表示している場合の親スキーマ。<securable-name>セキュリティ保護可能なオブジェクトの名前。
DESCRIBE <securable-type> EXTENDED <catalog>.<schema>.<securable-name>;
所有権の移転
オブジェクトの所有者を変更するには、 カタログエクスプローラー またはSQLステートメントを使用できます。
必要な権限 : オブジェクトの所有権を移転できるのは、現在の所有者、メタストア管理者、コンテナの所有者 (スキーマの場合はカタログ、テーブルの場合はスキーマ)、またはオブジェクトに対するMANAGE権限を持つユーザーです。Delta Sharingの共有オブジェクトは例外で、メタストア管理者のみが共有所有権を移転できます。
権限昇格を防ぐため、メタストア管理者のみが、ビュー、関数、またはモデルの所有権をアカウント内の任意のユーザー、サービスプリンシパル、またはグループに譲渡できます。現在所有者およびMANAGE権限を持つユーザーは、所有権を自身のユーザー名または所属するグループに譲渡することしかできません。
ビューまたはメトリクス ビューの所有権をグループに譲渡すると、共同編集が可能になります。 グループがビューまたはメトリクス ビューを所有している場合、グループのすべてのメンバーはその定義を編集できますが、データ アクセスはグループが表示する権限を持っているものに限定されます。 詳細な手順については、 「共同編集を有効にする」を参照してください。
Databricks SQLで作成されたマテリアライズドビューとストリーミングテーブルは、所有権を移転できます。詳細については、「マテリアライズドビューの所有者を変更する」および「ストリーミング テーブルの所有者を変更する」を参照してください。
LakeFlow Spark宣言型パイプラインで作成したマテリアライズドビューおよびストリーミングテーブルの所有権を直接譲渡することはできません。 代わりに、データセットを所有するパイプラインの実行ユーザーを変更してください。次回の更新時に、所有者は実行ユーザーに更新されます。実行ユーザーを設定するを参照してください。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
カタログ、スキーマ、テーブル、ビュー、外部ロケーション、ストレージ資格情報などのオブジェクトを選択します。
オブジェクトへの移動方法は、オブジェクトによって異なります。カタログ、スキーマ、およびスキーマの内容(テーブルやボリュームなど)は、左側の カタログ ペインで選択できます。をクリックすると、外部ロケーションやDelta Sharing共有などの他のオブジェクトを見つけることができます。
カタログペインの上にある歯車アイコンをクリックし、メニューからオブジェクトカテゴリを選択します。
ほとんどのオブジェクトの場合、所有者はオブジェクト詳細ページの 「概要」 タブに表示されます。外部ロケーションなどの一部のオブジェクトについては、オブジェクト詳細ページの上部に表示されます。
-
クリック
所有者 の横にある編集アイコン。
-
グループ、ユーザー、またはサービスプリンシパルを検索して選択します。
-
保存 をクリックします。
ノートブックまたはSQLクエリ エディターで次のSQLコマンドを実行します。 プレースホルダー値を置き換えてください。
<securable-type>: セキュリティ保護可能なオブジェクトのタイプ。例えば、CATALOGまたはTABLEなど。このコマンドでは、METASTOREはセキュリティ保護可能なオブジェクトとしてサポートされていません。<securable-name>: 担保可能なものの名前。スキーマまたはスキーマの内容を変更する場合は、親カタログやスキーマを既に指定していない限り、完全な 3 階層の名前空間 (catalog.schema.object) を使用する必要があります。<principal>はユーザー、 (applicationId 値で表される)サービスプリンシパル、またはグループです。 特殊文字を含むユーザー名、サービスプリンシパル名、およびグループ名は、バッククォート (` `) で囲む必要があります。プリンシパルを参照してください。
ALTER <securable-type> <securable-name> OWNER TO <principal>;
例えば、 ordersテーブルの所有権をaccountingグループに譲渡するには、次のようにします。
ALTER TABLE mycatalog.myschema.orders OWNER TO `accounting`;