特权和安全对象 (Databricks SQL)
安全对象
安全对象是在元存储中定义的对象,可以在其上向主体授予特权。
要管理任何对象的权限,你必须是其所有者或管理员。
语法
securable_object
{ ANONYMOUS FUNCTION |
ANY FILE |
CATALOG [ catalog_name ] |
{ SCHEMA | DATABASE } schema_name |
EXTERNAL LOCATION location_name |
FUNCTION function_name |
STORAGE CREDENTIAL credential_name |
[ TABLE ] table_name |
VIEW view_name }
参数
ANONYMOUS FUNCTION你可以从匿名函数将特权授予
SELECT。ANY FILE你可以向文件系统中的任何文件授予
SELECT和MODIFY特权。CATALOGcatalog_name你可以对目录授予
CREATE和USAGE。 默认目录名称是hive_metastore。 如果目录名称为hive_metastore,则还可以授予SELECT、READ_METADATA、MODIFY,并将这些特权授予目录中任何现有和将来的安全对象。{ SCHEMA | DATABASE }schema_name你可以对架构授予
CREATE、CREATE_NAMED_FUNCTION和USAGE。你还可以授予
SELECT、READ_METADATA、MODIFY,以对目录中任何现有和将来的安全对象授予这些特权。EXTERNAL LOCATIONlocation_name你可以对外部位置授予
CREATE TABLE、READ FILES和WRITE FILES。FUNCTIONfunction_name可以对用户定义函数授予
SELECT。STORAGE CREDENTIAL credential_name
可以对存储凭据授予
CREATE TABLE、READ FILES和WRITE FILES。[ TABLE ]table_name可以对表授予
SELECT和MODIFY。要使主体在表上使用
SELECT或MODIFY,它还必须对表的架构和目录具有USAGE特权。VIEWview_name你可以对视图授予
SELECT。要让主体从视图中使用
SELECT,主体还必须对视图的架构和目录具有USAGE特权。
权限类型
CREATE在目录或架构中创建对象。
CREATE TABLEMODIFY对表执行 COPY INTO、UPDATEDELETE、INSERT 或 MERGE INTO。
如果 securable_object 是
hive_metastore或其中的架构,则授予MODIFY将对安全对象中所有当前和将来的表和视图授予MODIFY。READ_METADATA在 SHOW 中发现安全对象,并在 DESCRIBE 中询问该对象
如果安全对象是
hive_metastore目录或其中的架构,则授予READ_METADATA将对安全对象内所有当前和将来的表和视图授予READ_METADATA。READ FILESSELECT查询表或视图,调用用户定义的函数或匿名函数,或者选择
ANY FILE。 用户需要对表、视图或函数的SELECT,还需要对对象的架构和目录的USAGE。如果安全对象是
hive_metastore或其中的架构,则授予SELECT将在安全对象内的所有当前和将来的表和视图上授予SELECT。USAGE必需,但不足以引用目录或架构中的任何对象。 主体还需要对各个安全对象具有特权。
WRITE FILES
特权矩阵
下表显示了哪些特权与哪些安全对象相关联。
| 权限类型 | ANY FILE | CATALOG | SCHEMA | EXTERNAL LOCATION | FUNCTION | 存储凭据 | TABLE | VIEW | |
|---|---|---|---|---|---|---|---|---|---|
| CREATE | 是 | 是 | |||||||
| CREATE TABLE | 是 | 是 | |||||||
| MODIFY | HMS | HMS | 是 | ||||||
| READ_METADATA | HMS | HMS | HMS | HMS | |||||
| READ FILES | 是 | 是 | |||||||
| SELECT | 是 | HMS | HMS | 是 | 是 | 是 | |||
| USAGE | 是 | 是 | |||||||
| WRITE FILES | 是 | 是 |
HMS 此特权仅适用于 hive_metastore 目录中的安全对象。
示例
-- Grant a privilege to the user alf@melmak.et
> GRANT SELECT ON TABLE t TO `alf@melmak.et`;
-- Revoke a privilege from the general public group.
> REVOKE USAGE ON SCHEMA some_schema FROM `alf@melmak.et`;