全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
MaxCompute

授权

更新时间:2017-11-07 15:55:32

添加用户 后,项目空间 Owner 或者项目空间管理员需要给该用户进行授权,只有用户获得权限后,才能执行操作。所谓授权,即授予用户对 MaxCompute 中的表,任务,资源等客体的某种操作权限,包括:读、写、查看等。

MaxCompute 提供了 ACL 授权,跨项目空间数据分享及项目空间数据保护等多种策略。授权操作一般涉及到三个要素:主体(Subject,可以是用户也可以是角色),客体(Object)和操作(Action)。在 MaxCompute 中,主体是指用户或角色,客体是指项目空间中的各种类型对象。

ACL 授权中,MaxCompute 的客体包括:ProjectTableFunctionResourceInstance,操作与特定对象类型有关,不同类型的对象支持的操作也不尽相同。

MaxCompute 项目空间支持如下的对象类型及操作:

客体(Object) 操作(Action) 说明
Project Read 查看项目空间自身(不包括项目空间的任何对象)的信息,如 CreateTime 等
Project Write 更新项目空间自身(不包括项目空间的任何对象)的信息,如 Comments
Project List 查看项目空间所有类型的对象列表
Project CreateTable 在项目空间中创建 Table
Project CreateInstance 在项目空间中创建 Instance
Project CreateFunction 在项目空间中创建 Function
Project CreateResource 在项目空间中创建 Resource
Project All 具备上述所有权限
Table Describe 读取 Table 的元信息
Table Select 读取 Table 的数据
Table Alter 修改 Table 的元信息,添加删除分区
Table Update 覆盖或添加 Table 的数据
Table Drop 删除 Table
Table All 具备上述所有权限
Function Read 读取,及执行权限
Function Write 更新
Function Delete 删除
Function Execute 执行
Function All 具备上述所有权限
Resource Read 读取
Resource Write 更新
Resource Delete 删除
Resource All 具备上述所有权限
Instance Read 读取
Instance Write 更新
Instance All 具备上述所有权限

注意

  • 上述权限描述中 Project 类型对象的 CreateTable 操作,Table 类型的 Select、Alter、Update、Drop 操作需要与 Project 对象的 CreateInstance 操作权限配合使用。
  • 单独使用上述几种权限而没有指派 CreateInstance 权限是无法完成对应操作的。这与 MaxCompute 的内部实现相关。同样,Table 的 Select 权限也要与 CreateInstance 权限配合使用,当跨项目操作如在项目A里select项目B的table,则需要有项目A的CreateInstance和项目B的table select权限 。
  • 在添加用户或创建角色之后,需要对用户或角色进行授权 。MaxCompute 授权是一种基于对象的授权。通过授权的权限数据(即访问控制列表, Access Control List)被看作是该对象的一种子资源。只有当对象已经存在时,才能进行授权操作。当对象被删除时,通过授权的权限数据会被自动删除。

类似SQL92的授权方法

MaxCompute 支持的授权方法类似于 SQL92 定义的 GRANT/REVOKE 语法,它通过简单的授权语句来完成对已存在的项目空间对象的授权或撤销授权。授权语法如下:

  1. grant actions on object to subject
  2. revoke actions on object from subject
  3. actions ::= action_item1, action_item2, ...
  4. object ::= project project_name | table schema_name |
  5. instance inst_name | function func_name |
  6. resource res_name
  7. subject ::= user full_username | role role_name

熟悉 SQL92 定义的 GRANT/REVOKE 语法或者熟悉 Oracle 数据库安全管理的用户容易发现,MaxCompute 的 ACL 授权语法并不支持 [WITH GRANT OPTION] 授权参数。也就是说,当用户 A 授权用户 B 访问某个对象时,用户 B 无法将权限进一步授权给用户 C。那么,所有的授权操作都必须由具有以下三种身份之一的用户来完成:

  • 项目空间 Owner。

  • 项目空间中拥有 admin 角色的用户。

  • 项目空间中对象创建者。

使用 ACL 授权的应用示例

假设云账号用户 alice@aliyun.com 是新加入到项目空间 test_project_a 的成员,Allen 是加入到 bob@aliyun.com 中的 RAM 子账号。在 test_project_a 中,他们需要提交作业、创建数据表、查看项目空间已存在的对象。

管理员执行的授权操作,如下所示:

  1. use test_project_a; --打开项目空间
  2. add user aliyun$alice@aliyun.com; --添加用户
  3. add user ram$bob@aliyun.com:Allen; --添加RAM子账号
  4. create role worker; --创建角色
  5. grant worker TO aliyun$alice@aliyun.com; --角色指派
  6. grant worker TO ram$bob@aliyun.com:Alice; --角色指派
  7. grant CreateInstance, CreateResource, CreateFunction, CreateTable, List ON PROJECT test_project TO ROLE worker; --对角色授权

跨项目空间Table、Resource、Function分享示例

接前一个示例,aliyun$alice@aliyun.com 和 ram$bob@aliyun.com:Allen 在test_project_a 拥有了一定的权限后,这两个用户还需查询test_project_b中的table prj_b_test_table,且需要用到test_project_b中的UDF prj_b_test_udf。

test_project_b的管理员执行的授权操作如下:

  1. use test_project_b; --打开项目空间
  2. add user aliyun$alice@aliyun.com; --添加用户
  3. add user ram$bob@aliyun.com:Allen; --添加RAM子账号
  4. create role prj_a_worker; --创建角色
  5. grant prj_a_worker TO aliyun$alice@aliyun.com; --角色指派
  6. grant prj_a_worker TO ram$bob@aliyun.com:Alice; --角色指派
  7. grant Describe , Select ON TABLE prj_b_test_table TO ROLE prj_a_worker; --对角色授予table权限
  8. grant Read ON Function prj_b_test_udf TO ROLE prj_a_worker; --对角色授予udf权限
  9. grant Read ON Resource prj_b_test_udf_resource TO ROLE prj_a_worker; --对角色授予实现udfResource的权限
  10. --授权后,这两个用户在test_project_a中查询表和使用udf的方式如下:
  11. use test_project_a;
  12. select test_project_b:prj_b_test_udf(arg0, arg1) as res from test_project_b.prj_b_test_table;

若是在test_project_a 中创建udf,则授权时只需进行Resource授权后,使用写法如create function function_name as 'com.aliyun.odps.compiler.udf.PlaybackJsonShrinkUdf' using 'test_project_b/resources/odps-compiler-playback.jar' -f;

本文导读目录