Unity Catalog オブジェクトの所有権を管理する

Unity Catalog 内のセキュリティ保護が可能なオブジェクトのそれぞれに所有者が存在します。 所有者には、任意のユーザー、サービス プリンシパル、またはアカウント グループ (プリンシパルとも呼ばれます) を指定できます。 オブジェクトを作成するプリンシパルが、その最初の所有者になります。 オブジェクト所有者は、他のプリンシパルに特権を付与する権限に加えて、テーブルに対する SELECTMODIFY など、オブジェクト上のすべての特権を持っています。 オブジェクトの所有者は、オブジェクトを削除することができます。

所有者の特権

オブジェクトの所有者には、そのオブジェクに対するすべての特権が自動的に付与されます。 さらに、オブジェクト所有者は、オブジェクト自体とそのすべての子オブジェクトに特権を付与できます。 つまり、スキーマの所有者は、スキーマ内のテーブルに対するすべての権限を自動的に持つわけではありませんが、スキーマ内のテーブルに対する権限を自身に付与できます。

メタストアとカタログの所有権

メタストア管理者は、メタストアの所有者です。 メタストア管理者は、メタストア管理者ロールを譲渡することでメタストアの所有権を再割り当てできます。「メタストア管理者を割り当てる」を参照してください

ワークスペースで Unity Catalog が自動的に有効になっている場合、ワークスペースは既定でメタストアにアタッチされ、メタストア内のワークスペース用にワークスペース カタログが作成されます。 ワークスペース管理者は、ワークスペース カタログの既定の所有者であり、その所有権を再割り当てすることができます。 既定ではメタストア管理者は割り当てされていませんが、必要に応じてアカウント管理者がメタストア管理者のアクセス許可を付与することもできます。 「メタストア管理者」を参照してください。

Unity Catalog での管理特権の詳細については、「Unity Catalog の管理特権」を参照してください。

オブジェクトの所有者を表示する

セキュリティ保護可能なオブジェクトの所有者を確認するには、次の構文を使用します。 プレースホルダー値を次のように置き換えます。

  • <SECURABLE-TYPE>: CATALOGTABLE など、セキュリティ保護可能なリソースの種類。
  • <catalog>: テーブルまたはビューの親カタログ。
  • <schema>: テーブルまたはビューの親スキーマ。
  • <securable-name>: テーブルやビューなど、セキュリティ保護可能なリソースの名前。

SQL

DESCRIBE <SECURABLE-TYPE> EXTENDED <catalog>.<schema>.<securable-name>;

Python

display(spark.sql("DESCRIBE <SECURABLE-TYPE> EXTENDED <catalog>.<schema>.<securable-name>"))

R

library(SparkR)

display(sql("DESCRIBE <SECURABLE-TYPE> EXTENDED <catalog>.<schema>.<securable-name>"))

Scala

display(spark.sql("DESCRIBE <SECURABLE-TYPE> EXTENDED <catalog>.<schema>.<securable-name>"))

所有権の移転

オブジェクトの所有権は、現在の所有者、メタストア管理者、またはコンテナー (スキーマの場合はカタログ、テーブルの場合はスキーマ) の所有者によって、他のプリンシパルに譲渡することができます。 Delta Sharing の共有オブジェクトは例外です。USE SHARESET SHARE PERMISSION を持つプリンシパルは、共有の所有権を譲渡することもできます。

オブジェクトの所有権を譲渡するには、次の構文で SQL コマンドを使用します。 プレースホルダー値を次のように置き換えます。

  • <SECURABLE-TYPE>: CATALOGTABLE などのセキュリティ保護可能なオブジェクトの型。 このコマンドでは、METASTORE はセキュリティ保護可能なオブジェクトとしてサポートされていません。
  • <SECURABLE-NAME>: セキュリティ保護可能なリソースの名前。
  • <PRINCIPAL>: アカウント レベルのユーザーのメール アドレス、またはアカウント レベルのグループの名前。

SQL

ALTER <SECURABLE-TYPE> <SECURABLE-NAME> OWNER TO <PRINCIPAL>;

Python

spark.sql("ALTER <SECURABLE-TYPE> <SECURABLE-NAME> OWNER TO <PRINCIPAL>")

R

library(SparkR)

sql("ALTER <SECURABLE-TYPE> <SECURABLE-NAME> OWNER TO <PRINCIPAL>")

Scala

spark.sql("ALTER <SECURABLE-TYPE> <SECURABLE-NAME> OWNER TO <PRINCIPAL>")

たとえば、テーブルの所有権を accounting グループに譲渡するには、次のようにします。

SQL

ALTER TABLE orders OWNER TO `accounting`;

Python

spark.sql("ALTER TABLE orders OWNER TO `accounting`")

R

library(SparkR)

sql("ALTER TABLE orders OWNER TO `accounting`")

Scala

spark.sql("ALTER TABLE orders OWNER TO `accounting`")