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 | +-------------------------------------------------+--------------+--------------------------+