REVOKE

MaxCompute支持通过ACL(Access Control Lists)、Policy方式撤销用户或角色对指定对象执行指定操作的权限。

前提条件

使用ACL、Policy权限控制方案前,请您确认已记录好如下信息:

  • 被授权人的账号或角色名称,且账号或角色已添加至MaxCompute项目。阿里云账号格式为ALIYUN$阿里云账号,RAM用户账号格式为RAM$归属阿里云账号:RAM用户名

    您可以通过MaxCompute客户端执行list users;list roles;命令获取账号或角色信息。

    如果需要新增用户或角色,请参见用户规划与管理角色规划

  • 授权对象类型、对象名称及操作。

    更多对象类型及操作信息,请参见MaxCompute权限

使用限制

ACL权限控制功能的使用限制如下:

  • ACL权限控制只支持对已存在的对象、被授权人进行授权,可以避免删除并重建同名对象所带来的安全风险。

  • ACL权限控制不支持通过[with grant option]子句授权。例如当用户A授权用户B可以访问某个对象时,用户B无法将权限进一步授权给用户C。

  • ACL授权为白名单(Allow)授权,不支持黑名单(Deny)授权。

  • Policy权限控制只支持对已存在的角色进行授权。

注意事项

  • 使用ACL权限控制功能的注意事项如下:

    • 如果删除了对象,MaxCompute会自动撤销与该对象关联的所有ACL授权信息。

    • 当一个用户被移除后,与该用户有关的授权仍然会被保留。一旦该用户以后被再次添加到该项目时,该用户的历史授权访问权限将被重新激活。如果需要彻底清除用户的权限信息,请参见彻底清除被删除用户遗留的权限信息

  • 使用Policy权限控制功能的注意事项如下:

    • Policy权限控制允许对不存在的对象授权,当删除对象时,与该对象关联的Policy授权信息不会被删除,授权人需要注意删除并重建同名对象所带来的安全风险。

    • 当一个用户被移除后,与该用户有关的授权仍然会被保留。一旦该用户以后被再次添加到该项目时,该用户的历史授权访问权限将被重新激活。如果需要彻底清除用户的权限信息,请参见彻底清除被删除用户遗留的权限信息

命令格式

  • 撤销ACL授权

    revoke <actions> on <object_type> <object_name> 
    [(<column_list>)] from <subject_type> <subject_name>;
  • 撤销Policy授权

    revoke <actions> on <object_type> <object_name> 
    from ROLE <role_name> 
    privilegeproperties ("policy" = "true", "allow"="{true|false}");

参数说明

参数名称

是否必填

说明

actions

指定被授予的操作权限名称。单次授权可以指定单个或多个操作。

当有多个操作时,多个操作名称之间使用英文逗号(,)分隔。操作取值请参见MaxCompute权限

object_type

指定被授予的对象类型,即客体。单次授权只能指定一个客体。

客体取值请参见MaxCompute权限

object_name

指定被授予的对象的名称。获取方式如下:

  • 项目名称:您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。

  • 表名称:您可以通过MaxCompute客户端执行show tables;命令获取表或视图名称。

  • 资源名称:您可以通过MaxCompute客户端执行list resources;命令获取资源名称。

  • 函数名称:您可以通过MaxCompute客户端执行list functions;命令获取函数名称。

  • 实例名称:您可以通过MaxCompute客户端执行show instances;命令获取实例ID。

授权对象支持以通配符星号(*)来表达。例如,table taobao*表示所有以taobao开头的表。

说明

授权给ROLE支持使用通配符星号(*);授权给USER不支持使用通配符。

column_list

仅当object_type为Table,且需要对表进行列级别权限控制时,需要配置该参数。单次授权可以指定单个或多个列名,列名之间使用英文逗号(,)分隔。

说明

该参数实现的是对指定表的指定列的Describe、Select、Alter、Update、Drop、ShowHistory、ALL权限进行控制。如果表的列设置了敏感等级,可通过Label权限控制功能,通过敏感等级标签对访问敏感数据的权限进行控制。

subject_type

指定被授权人的类型。取值范围如下:

  • USER:阿里云账号或RAM用户

  • ROLE:角色

subject_name

指定被授权的用户账号或角色名称。单次授权只能指定一个用户或角色。

您可以通过MaxCompute客户端执行list users;list roles;命令获取用户账号或角色名称。

role_name

指定被授权的角色名称。单次授权只能指定一个角色。

您可以通过MaxCompute客户端执行list roles;命令获取角色名称。

privilegeproperties

policy

固定取值为true。表示使用Policy权限控制方案。

allow

白名单授权必填

指定白名单授权机制。取值范围如下:

  • true:表示允许对指定对象执行指定操作。

  • false:表示不允许对指定对象执行指定操作,即黑名单。

执行环境

本文中的命令支持在如下工具平台执行:

示例

假设Bob@aliyun.com是test_project_a的项目所有者,Allen、Alice、Tom是隶属于Bob@aliyun.com的RAM用户。以MaxCompute客户端操作为例,授权示例如下:

  • 示例一:为用户撤销授权

    基于示例一、二,撤销对用户Allen、Alice的授权。命令示例如下。

    --Bob进入项目test_project_a。
    use test_project_a; 
    --撤销Allen授权。
    revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Allen;
    --撤销Alice授权。
    revoke All on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Alice;
    --查看用户Allen的撤销授权结果。权限列表无Describe, Select权限信息。
    show grants for RAM$Bob@aliyun.com:Allen; 
    --查看用户Alice的撤销授权结果。权限列表无All权限信息。
    show grants for RAM$Bob@aliyun.com:Alice; 
  • 示例二:为多个用户撤销基于角色授予的相同权限

    撤销对用户Alice、Tom、Lily@aliyun.com的授权。命令示例如下。

    --Bob进入项目test_project_a。
    use test_project_a; 
    --收回用户Alice、Tom、Lily@aliyun.com绑定的角色Worker。
    revoke Worker from RAM$Bob@aliyun.com:Alice;
    revoke Worker from RAM$Bob@aliyun.com:Tom;
    revoke Worker from ALIYUN$Lily@aliyun.com;
    --查看用户Lily的撤销授权结果。权限列表无Worker信息。
    show grants for ALIYUN$Lily@aliyun.com; 

撤销为用户或角色授予的访问Package的权限

在安装Package的MaxCompute项目中撤销为用户或角色授予的访问Package的权限。

  • 命令格式

    revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;
  • 参数说明

    参数名称

    是否必填

    说明

    actions

    指定对资源的操作权限。固定取值为Read。

    project_name

    指定Package所属MaxCompute项目名称。

    您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。

    package_name

    指定Package的名称。

    您可以通过MaxCompute客户端执行show packages;命令获取已创建的Package信息。

    name

    指定待撤销授权的用户账号或角色名称。单次撤销授权只能指定一个用户或角色。

    您可以通过MaxCompute客户端执行list users;list roles;命令获取用户账号或角色名称。

  • 使用示例

    撤销为Bella授予的Package访问权限。命令示例如下。

     --撤销允许Bella访问Package的权限。
    revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;

撤销Label显式授权

由Project Owner或具备Admin角色的用户撤销Label显式授权。

  • 命令格式

    revoke Label on table <table_name> [(<column_list>)] from {USER|ROLE} <name>;
  • 注意事项

    • 撤销显式授予用户的表的Label权限,会同时撤销显式授予用户的表列的Label权限。

    • 撤销显式Label授权信息,不会影响为用户设置的访问许可等级标签。例如用户的访问许可等级为2,为用户显式授予访问某张表敏感等级不超过3的数据,撤销授权后,用户仍然可以访问表中敏感等级小于等于2的数据。

  • 参数说明

    参数名称

    是否必填

    说明

    table_name

    指定目标表或视图的名称。

    您可以通过MaxCompute客户端执行show tables;命令获取表或视图名称。

    column_list

    当需要撤销目标表或视图中指定列的敏感数据访问权限时,需要配置该参数。可以指定多个列名,列名之间用英文逗号(,)分隔。

    name

    指定用户或角色的名称。

    您可以通过MaxCompute客户端执行list users;list roles;命令获取用户账号或角色名称。

  • 使用示例

    假设项目test_project_a中存在一张表sale_detail,shop_name、customer_id和total_price为表的列。Bob@aliyun.com是test_project_a的项目所有者。Allen为隶属于Bob的RAM用户,已被添加至项目test_project_a中。

    撤销为Allen授予的访问高敏感级数据权限,命令示例如下。

    --撤销Allen访问sale_detail表的shop_name、customer_id和total_price列中敏感度不超过3级的数据权限。
    revoke Label on table sale_detail(shop_name, customer_id, total_price) from USER RAM$Bob@aliyun.com:Allen;
    --查看Allen的撤销授权结果。
    show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen;
    --返回结果如下。
    User Label: 1
    +-------------+--------------+--------------------------+
    | Column      | GrantedLabel | Expires                  |
    +-------------+--------------+--------------------------+
    | total_price | 3            | 2021-12-31T19:56:18+0800 |
    +-------------+--------------+--------------------------+
    --撤销Allen访问sale_detail表中敏感数据的权限。
    revoke Label on table sale_detail from USER RAM$Bob@aliyun.com:Allen; 
    --查看Allen的撤销授权结果。
    show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen;
    --返回结果如下。
    User Label: 1

删除角色中的用户

删除指定角色内的用户。

  • 命令格式

    revoke <role_name> from <user_name>;
  • 参数说明

    • role_name:必填。待删除用户所属的角色名称。

    • user_name:必填。待删除阿里云用户或RAM用户的账号信息。阿里云账号格式为ALIYUN$****@aliyun.com;,RAM用户账号格式为RAM$****

  • 使用示例

    --删除角色player中的阿里云用户alice@aliyun.com。
    revoke player from ALIYUN$alice@aliyun.com;

相关命令

  • CREATE PACKAGE:创建Package。

  • CREATE ROLE:在MaxCompute项目空间中创建角色。

  • SET LABEL:MaxCompute支持在项目级别为用户设置访问许可等级标签,为表或表的列设置敏感等级标签(Label)。

  • GRANT:MaxCompute支持通过ACL(Access Control Lists)方式授予用户或角色对指定对象执行指定操作的权限。