管理 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`")