全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:DOWNLOAD

更新时间:Jun 13, 2023

MaxCompute支持通过Download权限控制方案,对角色或用户使用Tunnel下载表和实例的行为进行管控,提升项目数据安全性,避免出现数据泄露情况。本文为您介绍MaxCompute支持的Download授权命令,并提供授权示例供参考。

背景信息

在MaxCompute项目中,您可以通过Tunnel下载表和实例,但由于下载操作存在数据泄露安全风险,需要对该操作权限进行限制。

创建MaxCompute项目后,Download权限控制功能开关默认为关闭状态,表示不使用Download权限控制功能,即项目中的所有用户或角色对所有表或实例都有Download权限。项目所有者(Project owner)或具备Super_Administrator角色的用户可以在MaxCompute项目的Project级别,执行setproject odps.security.enabledownloadprivilege=true|false;命令,开启或关闭Download权限控制功能。

Download权限控制适用于如下场景。

场景

说明

授权人

授权操作入口

为用户授权

为单个用户授予允许下载指定表数据或实例的权限。

请参见权限一览表的支持的授权人列。

基于角色为用户授权

为单个角色,授予允许下载指定表数据或实例的权限,然后将角色绑定至多个用户,用户即可具备角色的权限。

前提条件

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

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

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

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

  • 授权对象类型及对象名称。

    您可以通过MaxCompute客户端执行show tables;list resources;list functions;show instances;命令获取表或视图名称及实例名称。

使用限制

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

  • 只支持对已存在的对象、被授权人进行授权。

  • 只支持将具体对象的Download权限授予用户,不支持通过通配符为用户授权。如果需要使用通配符,可以通过角色进行授权。

注意事项

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

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

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

命令格式

Download权限控制命令格式如下:

  • Download授权

    grant Download on <object_type> <object_name> to <subject_type> <subject_name>;
  • 撤销Download授权

    revoke Download on <object_type> <object_name> from <subject_type> <subject_name>;

参数说明如下。

参数名称

是否必填

说明

object_type

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

支持的客体取值如下:

  • Table:表

  • Instance:实例

object_name

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

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

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

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

subject_type

指定被授权人的类型。

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

  • ROLE:角色

subject_name

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

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

Download权限控制示例

假设username@example.com是test_project_a的项目所有者,Allen、Tom、Alice是隶属于username@example.com的RAM用户。test_project_a项目开启了Download权限控制功能。以MaxCompute客户端操作为例,授权示例如下:

  • 示例一:为用户授予Download权限

    将用户Allen添加至test_project_a项目,并授予下载sale_detail表数据权限。命令示例如下。

    --Bob进入项目test_project_a。
    use test_project_a; 
    --将用户Allen添加为项目成员。
    add user RAM$username@example.com:Allen;
    --支持用户Allen下载项目test_project_a中表sale_detail的数据。
    grant Download on table sale_detail to USER RAM$username@example.com:Allen;
    --查看用户Allen的授权结果。
    show grants for RAM$username@example.com:Allen; 
    --授权结果如下。表明用户Allen已经具备Download权限。
    Authorization Type: ACL
    [user/RAM$username@example.com:Allen]
    A       projects/test_project_a/tables/sale_detail: Download
  • 示例二:为用户撤销Download授权

    基于示例一,撤销对用户Allen的授权。

    --Bob进入项目test_project_a。
    use test_project_a; 
    --撤销用户Allen授权。
    revoke Download on table sale_detail from USER RAM$username@example.com:Allen;
    --查看用户Allen的撤销授权结果。权限列表无Download信息。
    show grants for RAM$username@example.com:Allen;  
  • 示例三:基于角色为多个用户授予Download权限

    为Alice、Tom授予在项目test_project_a中下载以tb_开头的表数据权限。命令示例如下。

    --Bob进入项目test_project_a。
    use test_project_a; 
    --将用户Alice、Tom添加为项目成员。
    add user RAM$username@example.com:Alice;
    add user RAM$username@example.com:Tom;
    --创建角色Worker。
    create role Worker; 
    --为用户绑定角色Worker。
    grant Worker TO RAM$username@example.com:Alice; 
    grant Worker TO RAM$username@example.com:Tom; 
    --支持角色Worker下载项目test_project_a中以tb_开头的表数据。
    grant Download on table tb_* to ROLE Worker;
    --查看用户Alice的授权结果。
    describe role Worker;
    --授权结果如下。A表示允许执行Download操作。
    Authorization Type: Policy
    [role/worker]
    A       projects/test_project_a/tables/tb_*: Download
  • 示例四:为多个用户撤销基于角色授予的Download权限

    基于示例三,撤销对用户Alice、Tom的授权。

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