当需要为MaxCompute项目中的多个用户授予相同权限时,您可以在MaxCompute项目中创建角色并为角色授权,然后将角色绑定至用户,用户会同时具备角色相应的权限。本文为您介绍角色授权语法并提供示例供参考。

背景信息

MaxCompute支持的角色授权场景如下。

角色授权场景 授权方式 授权人 授权操作入口
为角色授予对象的操作权限 请参见权限一览表的支持的授权人列。
撤销为角色授予的对象的操作权限
为角色授予Download权限 Download权限控制
撤销为角色授予的Download权限
为角色授予访问高敏感等级数据的权限 Label权限控制
撤销为角色授予的访问高敏感等级数据的权限

为角色授权后,即可将角色赋予用户。当用户不再需要角色相应的权限时,可收回赋予用户的角色。更多信息,请参见将角色赋予用户收回赋予用户的角色

为角色授予对象的操作权限

为角色授予项目、表、资源、函数或实例的操作权限。

  • 命令格式
    • 为角色授予项目的操作权限
      • ACL授权
        grant Read|Write|List|CreateTable|CreateInstance|CreateFunction|CreateResource|All 
              on project <project_name> 
              to ROLE <role_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
      • 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>")];
      • 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>")];
      • 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>")];
      • 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>")];
      • 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;
      --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;
      --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;
      --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;
      --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;
      --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 4 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;

后续指引

完成角色授权后,您可以根据实际业务需要执行如下操作: