当需要为MaxCompute项目中的多个用户授予相同权限时,您可以在MaxCompute项目中创建角色并为角色授权,然后将角色绑定至用户,用户会同时具备角色相应的权限。本文为您介绍项目级别角色授权语法并提供示例供参考。
背景信息
MaxCompute支持的角色授权场景如下。
角色授权场景 | 授权方式 | 授权人 | 授权操作入口 |
| 请参见权限一览表的支持的授权人列。 | ||
为角色授权后,即可将角色赋予用户。当用户不再需要角色相应的权限时,可收回赋予用户的角色。更多信息,请参见将角色赋予用户和收回赋予用户的角色。
为角色授予对象的操作权限
为角色授予项目、表、资源、函数或实例的操作权限。
命令格式
为角色授予项目的操作权限
ACL授权
grant Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All on project <project_name> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通过ACL语法实现Policy授权
grant Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All on project <project_name> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
为角色授予表的操作权限
ACL授权
grant Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通过ACL语法实现Policy授权
grant Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
为角色授予资源的操作权限
ACL授权
grant Read|Write|Delete|All on resource <resource_name> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通过ACL语法实现Policy授权
grant Read|Write|Delete|All on resource <resource_name> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
为角色授予函数的操作权限
ACL授权
grant Read|Write|Delete|Execute|All on function <function_name> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通过ACL语法实现Policy授权
grant Read|Write|Delete|Execute|All on function <function_name> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
为角色授予实例的操作权限
ACL授权
grant Read|Write|All on instance <instance_id> to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
通过ACL语法实现Policy授权
grant Read|Write|All on instance <instance_id> to ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}"[, "conditions"= "<conditions>", "expires"="<days>"]);
参数说明
详细参数解释,请参见ACL权限控制或Policy权限控制。
使用示例
假设Bob@aliyun.com是test_project_a的项目所有者,test_project_a项目已创建了角色Worker,现需要对角色进行授权。命令示例如下。
示例一:为角色授予在项目中创建表、函数、实例、查看项目所有类型的对象列表的权限。
--Bob进入test_project_a项目。 use test_project_a; --ACL授权。 grant CreateTable, CreateFunction, CreateInstance, List on project test_project_a to ROLE Worker; --通过ACL语法实现Policy授权。 grant CreateTable, CreateFunction, CreateInstance, List on project test_project_a to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例二:为角色授予读取表的元信息和表数据的权限。
--Bob进入test_project_a项目。 use test_project_a; --ACL授权。 grant Describe, Select on table sale_detail to ROLE Worker; --通过ACL语法实现Policy授权。 grant Describe, Select on table sale_detail to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例三:为角色授予读取、更新资源的权限。
--Bob进入test_project_a项目。 use test_project_a; --ACL授权。 grant Read, Write on resource udtf.jar to ROLE Worker; --通过ACL语法实现Policy授权。 grant Read, Write on resource udtf.jar to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例四:为角色授予读取、更新函数的权限。
--Bob进入test_project_a项目。 use test_project_a; --ACL授权。 grant Read, Write on function udf_test to ROLE Worker; --通过ACL语法实现Policy授权。 grant Read, Write on function udf_test to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例五:为角色授予实例的所有操作权限。
--Bob进入test_project_a项目。 use test_project_a; --ACL授权。 grant All on instance 202112300224**** to ROLE Worker; --通过ACL语法实现Policy授权。 grant All on instance 202112300224**** to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
撤销为角色授予的对象的操作权限
撤销为角色授予的项目、表、资源、函数或实例的操作权限。
命令格式
撤销为角色授予的项目的操作权限
撤销ACL授权
revoke Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All on project <project_name> from ROLE <role_name>;
撤销Policy授权
revoke Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All on project <project_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤销为角色授予的表的操作权限
撤销ACL授权
revoke Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] from ROLE <role_name>;
撤销Policy授权
revoke Describe|Select|Alter|Update|Drop|ShowHistory|All on table <table_name> [(<column_list>)] from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤销为角色授予的资源的操作权限
撤销ACL授权
revoke Read|Write|Delete|All on resource <resource_name> from ROLE <role_name>;
撤销Policy授权
revoke Read|Write|Delete|All on resource <resource_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤销为角色授予的函数的操作权限
撤销ACL授权
revoke Read|Write|Delete|Execute|All on function <function_name> from ROLE <role_name>;
撤销Policy授权
revoke Read|Write|Delete|Execute|All on function <function_name> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
撤销为角色授予的实例的操作权限
撤销ACL授权
revoke Read|Write|All on instance <instance_id> from ROLE <role_name>;
撤销Policy授权
revoke Read|Write|All on instance <instance_id> from ROLE <role_name> privilegeproperties("policy" = "true", "{allow}"="{true|false}");
参数说明
详细参数解释,请参见ACL权限控制或Policy权限控制。
使用示例
撤销为角色Worker授予的权限。命令示例如下。
示例一:撤销为角色Worker授予的在项目中创建表、函数、实例、查看项目所有类型的对象列表的权限。
--Bob进入test_project_a项目。 use test_project_a; --撤销ACL授权。 revoke CreateTable, CreateFunction, CreateInstance, List on project test_project_a from ROLE Worker; --撤销Policy授权。 revoke CreateTable, CreateFunction, CreateInstance, List on project test_project_a from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例二:撤销为角色Worker授予的读取表的元信息和表数据的权限。
--Bob进入test_project_a项目。 use test_project_a; --撤销ACL授权。 revoke Describe, Select on table sale_detail to ROLE Worker; --撤销Policy授权。 revoke Describe, Select on table sale_detail from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例三:撤销为角色Worker授予的读取、更新资源的权限。
--Bob进入test_project_a项目。 use test_project_a; --撤销ACL授权。 revoke Read, Write on resource udtf.jar from ROLE Worker; --撤销Policy授权。 revoke Read, Write on resource udtf.jar from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例四:撤销为角色Worker授予的读取、更新函数的权限。
--Bob进入test_project_a项目。 use test_project_a; --撤销ACL授权。 revoke Read, Write on function udf_test from ROLE Worker; --撤销Policy授权。 revoke Read, Write on function udf_test from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
示例五:撤销为角色Worker授予的实例的所有操作权限。
--Bob进入test_project_a项目。 use test_project_a; --撤销ACL授权。 revoke All on instance 202112300224**** from ROLE Worker; --撤销Policy授权。 revoke All on instance 202112300224**** from ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
为角色授予Download权限
为角色授予下载表数据、资源、函数或实例的权限。
命令格式
grant Download on {Table|Resource|Function|Instance} <object_name> to ROLE <role_name>;
参数说明
详细参数解释,请参见Download权限控制。
使用示例
假设test_project_a项目开启了Download权限管控,需要为角色Worker授予下载指定表数据的权限。命令示例如下。
--Bob进入test_project_a项目。 use test_project_a; --Bob为角色Worker授权。 grant download on table sale_detail to ROLE Worker;
撤销为角色授予的Download权限
撤销为角色授予的下载表数据、资源、函数或实例的权限。
命令格式
revoke Download on {Table|Resource|Function|Instance} <object_name> from ROLE <role_name>;
参数说明
详细参数解释,请参见Download权限控制。
使用示例
撤销为角色Worker授予的下载指定表数据的权限。命令示例如下。
--Bob进入test_project_a项目。 use test_project_a; --Bob为角色Worker撤销授权。 revoke download on table sale_detail from ROLE Worker;
为角色授予访问高敏感等级数据的权限
为角色设置访问许可等级标签后,如果角色需要访问更高级别的敏感数据,需要进行授权。更多设置角色访问许可等级标签信息,请参见为用户或角色设置访问许可等级标签。
命令格式
grant Label <number> on table <table_name> [(<column_list>)] to ROLE <role_name> [with exp <days>];
参数说明
详细参数解释,请参见Label显式授权。
使用示例
假设test_project_a项目中,角色的许可访问标签等级为2,现需要为角色Worker授予访问sale_detail表中最高敏感等级为4的数据权限。命令示例如下。
--Bob进入test_project_a项目。 use test_project_a; --Bob为角色Worker授权。 grant Label 4 on table sale_detail to ROLE Worker;
撤销为角色授予的访问高敏感等级数据的权限
撤销为角色授予的访问高敏感等级数据的权限。角色自身的许可访问等级不受影响。
命令格式
revoke Label on table <table_name> [(<column_list>)] from ROLE <role_name>;
参数说明
详细参数解释,请参见撤销Label显式授权。
使用示例
撤销为角色Worker授予的访问sale_detail表中最高敏感等级为4的数据权限。命令示例如下。
--Bob进入test_project_a项目。 use test_project_a; --Bob为角色Worker撤销授权。 revoke Label on table sale_detail from ROLE Worker;
将角色赋予用户
将项目级别的内置角色或自定义角色绑定至用户,用户会同时具备角色相应的权限。
命令格式
grant <role_name> to <user_name>;
注意事项
多个用户可以同时存在于一个角色下,一个用户也可以隶属于多个角色。
参数说明
参数名称
是否必填
说明
role_name
是
指定待赋予用户的角色名称。
您可以通过MaxCompute客户端执行
list roles;
命令查看角色信息。user_name
是
指定待绑定角色的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令查看用户信息。使用示例
将角色Worker绑定至已添加到MaxCompute项目的用户Kate@aliyun.com及RAM$Bob@aliyun.com:Allen。
--Bob进入test_project_a项目。 use test_project_a; --Bob将角色赋予用户。 grant Worker to ALIYUN$Kate@aliyun.com; grant Worker to RAM$Bob@aliyun.com:Allen;
收回赋予用户的角色
解绑赋予用户的角色,用户将不再具备角色相应的权限。
命令格式
revoke <role_name> from <user_name>;
参数说明
参数名称
是否必填
说明
role_name
是
指定待收回的角色名称。
您可以通过MaxCompute客户端执行
list roles;
命令获取角色名称。user_name
是
指定待收回角色相应的用户名称。
您可以通过MaxCompute客户端执行
list users;
命令获取用户名称。使用示例
收回赋予用户Kate@aliyun.com及RAM$Bob@aliyun.com:Allen的角色Worker。
--Bob进入test_project_a项目。 use test_project_a; --Bob收回赋予用户的角色。 revoke Worker from ALIYUN$Kate@aliyun.com; revoke Worker from RAM$Bob@aliyun.com:Allen;
后续指引
完成角色授权后,您可以根据实际业务需要执行如下操作: