当您需要跨项目访问资源(对象)时,如果未被加入目标资源所属项目,您无法直接访问资源。MaxCompute提供了Package授权机制,可以将资源及相应权限打包为Package,其他项目安装此Package后,即可解决跨项目访问资源问题。本文为您介绍Package授权操作并提供示例供参考。
背景信息
- 将其他项目中需要使用资源的用户都添加到A项目,并逐个执行授权操作。但该方法比较繁琐,不推荐在跨项目访问资源场景下使用。仅当需要精细控制资源由单人使用,且申请人是本业务项目团队成员时,建议使用该方式。更多授权语法信息,请参见ACL权限控制。
- 基于Package实现跨项目资源分享。
Package是一种跨项目共享数据及资源的机制。A项目的所有者对其他项目需要使用的资源进行打包(也就是创建Package),然后许可其他项目安装此Package。其他项目的所有者安装Package之后,就可以自行管理Package是否需要进一步授权给自己项目下的用户。完整实现流程如下。
主体 | 说明 | 可执行的操作 | 主体角色 | 操作入口 |
---|---|---|---|---|
Package创建者 | 所在的项目是资源提供方。将需要分享的资源及其操作权限进行打包,然后许可Package使用者安装使用。 | 创建Package | 资源所属项目的项目所有者(Project Owner)或具备资源所属项目的项目级别Super_Administrator角色的用户。 | |
将资源添加至Package | ||||
删除Package中的资源 | ||||
许可其他项目使用Package | ||||
撤销其他项目使用Package的许可 | ||||
删除Package | ||||
查看Package列表 | ||||
查看Package的详细信息 | ||||
Package使用者 | 所在的项目是资源使用方。安装了资源提供方创建的Package之后,便可以直接跨项目访问资源。 | 安装Package | 使用资源的项目的所有者(Project Owner)或具备使用资源项目的项目级别Super_Administrator和Admin角色的用户。 | |
查看安装的Package的详细信息 | ||||
为用户或角色授予访问Package的权限 | ||||
卸载Package |
使用限制
- 一个Package中最多可以包含1000个资源。
- 一个Package最多允许安装至10万个MaxCompute项目中。
- 一个MaxCompute项目最多可以从另外一个MaxCompute项目安装100个Package。
- 一个MaxCompute项目最多可以创建10万个Package。
- 一个MaxCompute项目最多可以安装10万个Package。
创建Package
资源提供方在MaxCompute项目中创建Package。
- 命令格式
create package <package_name>;
- 参数说明
参数名称 是否必填 说明 package_name 是 指定Package的名称,项目内唯一。长度不超过128个字符,可以包含字母、下划线(_)或数字。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
假设Bob@aliyun.com是test_project_a的项目所有者,现需要允许其他项目访问test_project_a中的部分资源。创建Package,命令示例如下。
--Bob进入项目test_project_a。 use test_project_a; --创建Package。 create package datashare;
将资源添加至Package
将资源使用方需要的资源添加至创建的Package中。
- 命令格式
add <object_type> <object_name> to package <package_name> [with privileges <privileges>];
- 使用限制
不支持添加Project类型对象至Package。
- 注意事项
资源添加到Package时,并非是以快照形式打包。后续资源数据变更时,通过Package访问的是资源的最新数据。
- 参数说明
参数名称 是否必填 说明 object_type 是 指定待添加的资源类型,即对象类型。单次添加只能指定一个对象。 对象取值请参见权限列表。
object_name 是 指定资源的名称。获取方式如下: - 表名称:您可以通过MaxCompute客户端执行
show tables;
命令获取表或视图名称。 - 资源文件名称:您可以通过MaxCompute客户端执行
list resources;
命令获取资源名称。 - 函数名称:您可以通过MaxCompute客户端执行
list functions;
命令获取函数名称。 - 实例名称:您可以通过MaxCompute客户端执行
show instances;
命令获取实例名称。
说明- 添加资源时,支持使用通配符星号(*)。例如
add table * to package package_name;
表示将所有表添加至Package。 - 添加资源时,资源名称不能加项目名前缀。例如,项目为A,需要添加A中的表table到某个Package中,则执行添加操作时,资源名不能写为A.table,应该直接写为table。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。privileges 否 指定对资源的操作权限。当未指定操作权限时,默认为Read、Describe、Select权限。资源及其权限被看作一个整体,添加后不可更新。如果需要更新,只能删除Package关联的资源后重新添加资源及权限。 操作取值请参见权限列表。
- 表名称:您可以通过MaxCompute客户端执行
- 使用示例
将test_project_a项目中的资源udtf.jar、表sale_detail和bank_data添加至Package中。命令示例如下。
--将资源添加至Package。 add Resource udtf.jar to package datashare; add Table sale_detail to package datashare;
删除Package中的资源
删除Package中已添加的资源。
- 命令格式
remove <object_type> <object_name> from package <package_name>;
- 参数说明
参数名称 是否必填 说明 object_type 是 指定待删除的资源类型,即对象类型。单次删除只能指定一个对象。 对象取值请参见权限列表。
object_name 是 指定资源的名称。获取方式如下: - 表名称:您可以通过MaxCompute客户端执行
show tables;
命令获取表或视图名称。 - 资源文件名称:您可以通过MaxCompute客户端执行
list resources;
命令获取资源名称。 - 函数名称:您可以通过MaxCompute客户端执行
list functions;
命令获取函数名称。 - 实例名称:您可以通过MaxCompute客户端执行
show instances;
命令获取实例名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 表名称:您可以通过MaxCompute客户端执行
- 使用示例
删除Package datashare中已添加的表sale_detail,命令示例如下。
--删除Package中的资源。 remove Table sale_detail from package datashare;
许可其他项目使用Package
资源提供方授予其他项目使用Package的权限。
- 命令格式
allow project <project_name> to install package <package_name> [using label <number>];
- 参数说明
参数名称 是否必填 说明 project_name 是 指定可使用Package的MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。number 否 用于增加一个Label权限控制策略,指定允许资源使用方访问的敏感数据等级。被授权的MaxCompute项目可以访问Package,但仅能访问敏感等级小于等于number的数据。不指定时,默认为0级。 更多Label权限控制信息,请参见Label权限控制。
- 使用示例
允许test_project_b项目安装test_project_a中已创建的Package datashare。命令示例如下。
--许可test_project_b安装Package。 allow project test_project_b to install package datashare;
撤销其他项目使用Package的许可
资源提供方撤销授予其他项目使用Package的权限。
- 命令格式
disallow project <project_name> to install package <package_name>;
- 参数说明
参数名称 是否必填 说明 project_name 是 指定待撤销访问Package权限的MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
撤销test_project_b项目可以安装test_project_a中的Package datashare的权限。命令示例如下。
--撤销Package授权许可。 disallow project test_project_b to install package datashare;
删除Package
删除已创建的Package。
- 命令格式
delete|drop package <package_name>;
- 注意事项
删除Package会清除通过这个Package授予的权限信息。
- 参数说明
参数名称 是否必填 说明 package_name 是 指定待删除Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
删除test_project_a中已创建的Package datashare。命令示例如下。
--删除Package。 drop package datashare;
查看Package列表
在MaxCompute项目中查看已创建或已安装的Package列表。
- 命令格式
show packages;
- 使用示例
查看test_project_a项目中创建或安装的Package信息。命令示例如下。
返回结果如下。包含如下信息:--查看Package列表。 show packages;
- 创建或安装Package的名称(PackageName)
- 创建时间(CreateTime)
- Package所属MaxCompute项目(SourceProject)
- 安装时间(InstallTime)
- 状态(Status)
+-------------+--------------------------+ | PackageName | CreateTime | +-------------+--------------------------+ | datashare | 2021-12-28T18:10:39+0800 | +-------------+--------------------------+ +-------------+--------------------+--------------------------+--------+ | PackageName | SourceProject | InstallTime | Status | +-------------+--------------------+--------------------------+--------+ | systables | information_schema | 2020-11-24T14:11:23+0800 | OK | +-------------+--------------------+--------------------------+--------+
查看Package的详细信息
在MaxCompute项目中查看已创建的Package详细信息。
- 命令格式
describe package <package_name>;
- 参数说明
参数名称 是否必填 说明 package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
查看test_project_a项目中Package datashare包含的资源及权限信息。命令示例如下。
返回结果如下。包含如下信息:--查看Package详情。 describe package datashare;
- Package创建时间(CreateTime)
- Package的名称(PackageName)
- Package所属MaxCompute项目(SourceProject)
- Package资源类型(ObjectType)
- Package资源名称(ObjectName)
- Package资源权限(ObjectPrivileges)
- 允许安装Package的项目(ProjectName)
- 许可访问等级(UserLabel)
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+ Allowed Project List +-----------------+-----------+ | ProjectName | UserLabel | +-----------------+-----------+ | test_project_b | 0 | +-----------------+-----------+
安装Package
在目标MaxCompute项目中安装Package。
- 命令格式
install package <project_name>.<package_name>;
- 注意事项
Package会展开安装,安装完成后,您可以执行
show packages;
命令查询到安装的Package,通过describe package <package_name>;
命令查看Package内的资源及权限信息。 - 参数说明
参数名称 是否必填 说明 project_name 是 指定Package所属MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
在test_project_b项目中安装test_project_a项目的Package datashare,假设Amy@aliyun.com为test_project_b的项目所有者。命令示例如下。
--Amy进入项目test_project_b。 use test_project_b; --安装Package。 install package test_project_a.datashare;
查看安装的Package的详细信息
在MaxCompute项目中查看已安装的Package详细信息。
- 命令格式
describe package <project_name>.<package_name>;
- 参数说明
参数名称 是否必填 说明 project_name 是 指定Package所属MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
查看test_project_b项目中安装的Package datashare包含的资源及权限信息。命令示例如下。
返回结果如下。包含如下信息:--查看Package详情。 describe package test_project_a.datashare;
- Package创建时间(CreateTime)
- Package的名称(PackageName)
- Package所属MaxCompute项目(SourceProject)
- Package资源类型(ObjectType)
- Package资源名称(ObjectName)
- Package资源权限(ObjectPrivileges)
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+
为用户或角色授予访问Package的权限
在安装Package的MaxCompute项目中为用户或角色授予访问Package的权限。
被安装的Package是一种独立的MaxCompute对象类型。如果要访问Package里的资源,您必须拥有该Package的Read权限。如果请求者没有Read权限,可以由项目所有者、具备Super_Administrator或Admin角色的用户通过ACL权限控制方案完成授权。
- 命令格式
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;
- 注意事项
授权后,用户或角色仅在安装Package的项目中有权限访问Package中的资源。如果需要精细化管控Package的权限,请参见Package的权限控制。
- 参数说明
参数名称 是否必填 说明 actions 是 指定对资源的操作权限。固定取值为Read。 project_name 是 指定Package所属MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。name 是 指定被授权的用户账号或角色名称。单次授权只能指定一个用户或角色。 您可以通过MaxCompute客户端执行
list users;
或list roles;
命令获取用户账号或角色名称。 - 使用示例
假设Bella为隶属于Amy@aliyun.com的RAM用户,现需要为Bella授予Package的访问权限。命令示例如下。
--允许Bella访问Package。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
撤销为用户或角色授予的访问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;
卸载Package
为目标MaxCompute项目卸载已安装的Package。
- 命令格式
uninstall package <project_name>.<package_name>;
- 参数说明
参数名称 是否必填 说明 project_name 是 指定Package所属MaxCompute项目名称。 您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。
package_name 是 指定Package的名称。 您可以通过MaxCompute客户端执行
show packages;
命令获取已创建的Package信息。 - 使用示例
卸载test_project_b项目中已安装的Package datashare。命令示例如下。
--卸载Package。 uninstall package test_project_a.datashare;
Package使用示例
- Bob进入项目test_project_a中创建Package。
--Bob进入项目test_project_a。 use test_project_a; --创建Package。 create package datashare;
- Bob为新创建的Package添加资源。
--将资源添加至Package。 add Resource udtf.jar to package datashare; add Table sale_detail to package datashare;
- Bob允许项目test_project_b安装Package。
--许可test_project_b安装Package。 allow project test_project_b to install package datashare;
- Amy进入项目test_project_b中安装Package。
--进入test_project_b。 use test_project_b; --安装Package。 install package test_project_a.datashare; --查看Package中的资源列表。 describe package test_project_a.datashare; --返回结果如下。 CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+
- Amy为Bella授予访问Package的权限。
-授权Bella访问Package。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;