MaxCompute支持通过SQL语句查询用户、角色、对象等的权限信息。本文为您介绍SQL权限查询语法并提供示例供参考。
基于MaxCompute提供的授权方案为用户或角色授权后,您可以查询如下权限信息。
查询场景 | 查询操作 | 操作人角色 | 操作入口 |
查询角色的权限信息 | |||
项目的所有者(Project Owner)、具备Super_Administrator或Admin角色的用户 | |||
查询用户的权限信息 | |||
查询对象的ACL授权信息 | |||
查询Label授权信息 | |||
查询Package授权信息 | |||
查看用户权限或角色权限信息时,MaxCompute会在返回信息中使用如下标记字符:
A:表示Allow,即允许的操作权限。
D:表示Deny,即拒绝的操作权限。
C:表示With Condition,即带条件的授权。
G:表示With Grant Option,即可以对客体(Object)进行授权。
查询指定角色的权限
命令格式
show grants for role <role_name>;
参数说明
参数名称
是否必填
说明
role_name
是
指定待查询权限的角色名称。
您可以通过MaxCompute客户端执行
list roles;
命令获取角色名称。返回信息
查询结果会返回ACL、Policy、Download权限信息。
使用示例
假设项目名为test_project_a,Worker为项目中的角色,命令示例如下。
show grants for role Worker;
返回结果如下。
Authorization Type: ACL [role/Worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/tables/bank_data: Download | Describe | Select Expires:20xx-xx-xxTxx:xx:xx+xxxx Authorization Type: Policy [role/Worker] A projects/test_project_a/tables/bak*: Download A projects/test_project_a/tables/sale_detail: Update A projects/test_project_a/tables/tb_*: Download | Drop A projects/test_project_a/tables/view_1: Drop
查询指定角色的权限及绑定的用户信息
命令格式
describe role <role_name>;
参数说明
参数名称
是否必填
说明
role_name
是
指定待查询权限的角色名称。
您可以通过MaxCompute客户端执行
list roles;
命令获取角色名称。返回信息
查询结果会返回ACL、Policy、Download权限信息。
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Worker为项目中的角色,命令示例如下。
describe role Worker;
返回结果如下。
[users] RAM$Bob@aliyun.com:Allen Authorization Type: ACL A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/tables/bank_data: Download Authorization Type: Policy A projects/test_project_a/tables/bak*: Download A projects/test_project_a/tables/sale_detail: Update A projects/test_project_a/tables/tb_*: Download | Drop A projects/test_project_a/tables/view_1: Drop
查询当前用户的权限及绑定的角色信息
命令格式
show grants;
返回信息
查询结果会返回如下信息:
项目所有者:账号信息、项目列表信息。
其他用户:绑定的角色信息、ACL、Policy及Download权限信息。
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。
假设当前项目的访问者为Bob,执行
show grants;
命令,返回结果如下。[ALIYUN$Bob@aliyun.com] projects/test_project_a: Project Owner
假设当前项目的访问者为Allen,执行
show grants;
命令,返回结果如下。[roles] worker Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/packages/project_test_b.datashare: Read Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Drop | Download
查询指定用户的权限信息和绑定的角色信息
命令格式
show grants for <user_name>;
参数说明
参数名称
是否必填
说明
user_name
是
指定待查询权限的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令获取用户名称。返回信息
查询结果会返回如下信息:
项目所有者:账号信息、项目列表信息。
其他用户:绑定的角色信息、ACL、Policy及Download权限信息。
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。
查询Bob的权限信息,命令示例如下。
show grants for ALIYUN$Bob@aliyun.com;
返回结果如下。
[ALIYUN$Bob@aliyun.com] projects/test_project_a: Project Owner
查询Allen的权限信息,命令示例如下。
show grants for RAM$Bob@aliyun.com:Allen;
返回结果如下。
[roles] worker Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List A projects/test_project_a/packages/project_test_b.datashare: Read Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Drop | Download
查询指定对象的ACL授权信息
命令格式
show acl for <object_name> [on type <object_type>];
参数说明
参数名称
是否必填
说明
object_name
是
指定待查询对象的名称。
项目名称:您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。查询类型为Project时,只能查询当前Project的信息。
表名称:您可以通过MaxCompute客户端执行
show tables;
命令获取表或视图名称。资源名称:您可以通过MaxCompute客户端执行
list resources;
命令获取资源名称。函数名称:您可以通过MaxCompute客户端执行
list functions;
命令获取函数名称。实例名称:您可以通过MaxCompute客户端执行
show instances;
命令获取实例ID。
object_type
否
指定待查询对象的类型。
取值如下:
Project:项目
Table:表
Resource:资源文件
Function:函数
Instance:实例
未配置
on type <object_type>
时,默认的对象类型为Table。返回信息
查询结果会返回具备对象操作权限的项目角色及用户信息、ACL权限信息。
使用示例
查看test_project_a项目中的对象授权信息。
查询项目的权限信息,命令示例如下。
show acl for test_project_a on type project;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A role/worker(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List A role/worker1(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List A role/worker2(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction
查询表的权限信息,命令示例如下。
show acl for sale_detail on type table;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/customer_id): Describe | Select A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/shop_name): Describe | Select
查询资源的权限信息,命令示例如下。
show acl for udtf.jar on type resource;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/resources/udtf.jar): Read | Write
查询函数的权限信息,命令示例如下。
show acl for UDTFResource on type function;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A role/worker1(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): Download A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): All
查询实例的权限信息,命令示例如下。
show acl for 20220105031923461ghu**** on type instance;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All AG object_creator/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/instances/20220105031923461ghu****): All
查询当前用户可访问的所有高敏感等级数据表
命令格式
show label grants;
返回信息
查询结果会返回如下信息:
当前用户的访问许可等级(User Label)
可访问的高敏感等级数据表(TableName)
用户可访问的敏感数据级别(GrantedLabel)
权限过期时间(Expires)
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。
假设当前项目的访问者为Bob,执行
show label grants;
命令,返回结果如下。User Label: 0 +--------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +--------------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:30:47+0800 | +--------------+--------------+--------------------------+ | bank_data_pt | 4 | 2022-07-04T16:36:04+0800 | +--------------+--------------+--------------------------+
假设当前项目的访问者为Allen,执行
show label grants;
命令,返回结果如下。User Label: 1 +-------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | sale_detail | 2 | 2022-01-09T11:43:27+0800 | +-------------+--------------+--------------------------+
查询当前用户可访问的指定等级的高敏感数据表
命令格式
show label <level> grants;
参数信息
参数名称
是否必填
说明
level
是
指定敏感等级。
返回信息
查询结果会返回如下信息:
当前用户的访问许可等级(User Label)
可访问的高敏感等级数据表(TableName)
用户可访问的敏感数据级别(GrantedLabel)
权限过期时间(Expires)
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。
假设当前项目的访问者为Bob,执行命令如下。
show label 3 grants;
返回结果如下。
User Label: 0 +--------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +--------------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:30:47+0800 | +--------------+--------------+--------------------------+
假设当前项目的访问者为Allen,执行命令如下。
show label 2 grants;
返回结果如下。
User Label: 1 +-------------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | sale_detail | 2 | 2022-01-09T11:43:27+0800 | +-------------+--------------+--------------------------+
查询指定用户可访问的高敏感等级数据表
命令格式
show label grants for user <user_name>;
参数说明
参数名称
是否必填
说明
user_name
是
指定待查询权限的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令获取用户名称。返回信息
查询结果会返回如下信息:
当前用户的访问许可等级(User Label)
可访问的高敏感等级数据表(TableName)
用户可访问的敏感数据级别(GrantedLabel)
权限过期时间(Expires)
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。查询Allen可访问的高敏感等级数据表,命令示例如下。
show label grants for user RAM$Bob@aliyun.com:Allen;
返回结果如下。
User Label: 2 +-----------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-----------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:29:32+0800 | +-----------+--------------+--------------------------+
查询指定用户可访问的指定等级的高敏感数据表
命令格式
show label <level> grants for user <user_name>;
参数说明
参数名称
是否必填
说明
level
是
指定敏感等级。
user_name
是
指定待查询权限的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令获取用户名称。返回信息
查询结果会返回如下信息:
当前用户的访问许可等级(User Label)
可访问的高敏感等级数据表(TableName)
用户可访问的敏感数据级别(GrantedLabel)
权限过期时间(Expires)
使用示例
假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。查询Allen可访问的高敏感等级数据表,命令示例如下。
show label 3 grants for user RAM$Bob@aliyun.com:Allen;
返回结果如下。
User Label: 2 +-----------+--------------+--------------------------+ | TableName | GrantedLabel | Expires | +-----------+--------------+--------------------------+ | bank_data | 3 | 2022-07-04T16:29:32+0800 | +-----------+--------------+--------------------------+
查询可以访问指定敏感数据表的用户
命令格式
show label grants on table <table_name>;
参数说明
参数名称
是否必填
说明
table_name
是
指定表的名称。
您可以通过MaxCompute客户端执行
show tables;
命令获取表名称。返回信息
查询结果会返回如下信息:
当前表的敏感数据等级范围(Sensitive Label Range)
可访问的用户或角色(UserName)
用户可访问的敏感等级(GrantedLabel)
权限过期时间(Expires)
使用示例
查询项目test_project_a中可访问高敏感数据表sale_detail的用户列表,命令示例如下。
show label grants on table sale_detail;
返回结果如下。
Sensitive Label Range: [3, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | worker | 4 | 2022-07-04T11:23:35+0800 | +-------------------------------------------------+--------------+--------------------------+ | RAM$Bob@aliyun.com:Allen | 4 | 2022-07-04T17:54:00+0800 | +-------------------------------------------------+--------------+--------------------------+
查询可以访问指定敏感数据表的指定等级的用户
命令格式
show label <level> grants on table <table_name>;
参数说明
参数名称
是否必填
说明
level
是
指定敏感等级。
table_name
是
指定表的名称。
您可以通过MaxCompute客户端执行
show tables;
命令获取表名称。返回信息
查询结果会返回如下信息:
当前表的敏感数据等级范围(Sensitive Label Range)
可访问的用户或角色(UserName)
用户可访问的敏感等级(GrantedLabel)
权限过期时间(Expires)
使用示例
查询项目test_project_a中可访问高敏感数据表sale_detail的用户列表,命令示例如下。
show label 4 grants on table sale_detail;
返回结果如下。
Sensitive Label Range: [3, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | worker | 4 | 2022-07-04T11:23:35+0800 | +-------------------------------------------------+--------------+--------------------------+ | RAM$Bob@aliyun.com:Allen | 4 | 2022-07-04T17:54:00+0800 | +-------------------------------------------------+--------------+--------------------------+
查询指定用户在指定敏感数据表中的权限
命令格式
show label [<label>] grants on table <table_name> for user <user_name>;
参数说明
参数名称
是否必填
说明
label
否
指定敏感等级。
table_name
是
指定表的名称。
您可以通过MaxCompute客户端执行
show tables;
命令获取表名称。user_name
是
指定待查询权限的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令获取用户名称。返回信息
查询结果会返回如下信息:
当前用户的访问许可等级标签(User Label)
用户可访问的表的列(Column)
用户可访问的敏感等级(GrantedLabel)
权限过期时间(Expires)
使用示例
查询项目test_project_a中Allen可访问sale_detail的数据,命令示例如下。
show label grants on table sale_detail for user RAM$Bob@aliyun.com:Allen;
返回结果如下。
User Label: 2 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | customer_id | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+ | shop_name | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+ | total_price | 4 | 2022-07-04T17:54:00+0800 | +-------------+--------------+--------------------------+
查询指定表中所有列的敏感等级
命令格式
describe <table_name>;
参数说明
参数名称
是否必填
说明
table_name
是
指定表的名称。
您可以通过MaxCompute客户端执行
show tables;
命令获取表名称。返回信息
查询结果会包含当前表的敏感等级(TableLabel)、表的列最高敏感等级(MaxLabel)、各列的敏感等级(Label)。
使用示例
查询项目test_project_a中表sale_detail及其列的敏感等级,命令示例如下。
describe sale_detail;
返回结果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$Bob@aliyun.com | Project: project_test_a | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-12-13 11:27:04 | | LastDDLTime: 2021-12-13 11:27:04 | | LastModifiedTime: 2021-12-13 11:27:26 | +------------------------------------------------------------------------------------+ | TableLabel: 3 | | MaxLabel: L4 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 784 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | shop_name | string | 4 | | | customer_id | string | 4 | | | total_price | double | 3 | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | sale_date | string | | | region | string | | +------------------------------------------------------------------------------------+
查询指定Package的授权信息
命令格式
show acl for <project_name>.<package_name> on type package;
参数说明
参数名称
是否必填
说明
project_name
是
指定待查询Package所属项目名称。
您可以通过MaxCompute客户端执行
describe package <package_name>;
命令查询Package所属项目名称。package_name
是
指定待查询Package的名称。
您可以通过MaxCompute客户端执行
show packages;
命令查询Package名称。返回信息
查询结果会返回具备对象操作权限的项目内置角色及账号信息、ACL权限信息。
使用示例
查看test_project_b项目中安装的datashare Package的授权信息。命令示例如下。
show acl for test_project_b.datashare on type package;
返回结果如下。
Authorization Type: Implicit AG project_owner/ALIYUN$Bob@aliyun.com: All AG admin/ALIYUN$Bob@aliyun.com: All Authorization Type: ACL A user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_b/packages/test_project_a.datashare): Read
查询指定Package内资源的授权信息
命令格式
show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package _name>");
参数说明
参数名称
是否必填
说明
object_type
是
指定待查询Package内的资源类型。
您可以通过MaxCompute客户端执行
describe package <project_name>.<package_name>;
命令查询Package内的资源类型。object_name
是
指定待查询资源的名称。
您可以通过MaxCompute客户端执行
describe package <project_name>.<package_name>;
命令查询Package内的资源名称。project_name
是
指定待查询Package所属项目名称。
您可以通过MaxCompute客户端执行
describe package <project_name>.<package_name>;
命令查询Package所属项目名称。package_name
是
指定待查询Package的名称。
您可以通过MaxCompute客户端执行
show packages;
命令查询Package名称。返回信息
查询结果会返回具备对象操作权限的项目内置角色及用户、ACL权限信息。
使用示例
查看安装的datashare Package中表sale_detail的授权信息。命令示例如下。
show grants on Table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
返回结果如下。
Authorization Type: Implicit AG project_owner/: All Authorization Type: InstalledObjecACL [datashare] A user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_a/tables/sale_detail): Select
查询指定Package内表的Label授权信息
命令格式
show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
参数说明
参数名称
是否必填
说明
table_name
是
指定待查询Package内的表名称。
您可以通过MaxCompute客户端执行
describe package <project_name>.<package_name>;
命令查询Package内的表名称。project_name
是
指定待查询Package所属项目名称。
您可以通过MaxCompute客户端执行
describe package <package_name>;
命令查询Package所属项目名称。package_name
是
指定待查询Package的名称。
您可以通过MaxCompute客户端执行
show packages;
命令查询Package名称。返回信息
查询结果会返回如下信息:
当前表的敏感数据等级范围(Sensitive Label Range)
可访问的用户或角色(UserName)
用户可访问的敏感等级(GrantedLabel)
权限过期时间(Expires)
使用示例
查看安装的datashare Package中表sale_detail的Label授权信息。命令示例如下。
show label grants on table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
返回结果如下。
Sensitive Label Range: [2, 4] +-------------------------------------------------+--------------+--------------------------+ | UserName | GrantedLabel | Expires | +-------------------------------------------------+--------------+--------------------------+ | RAM$Amy@aliyun.com:Bella | 3 | 2022-07-12T22:24:24+0800 | +-------------------------------------------------+--------------+--------------------------+