基于Package跨項(xiàng)目訪問資源
當(dāng)您需要跨項(xiàng)目(包含跨賬號(hào))訪問資源(對(duì)象)時(shí),如果未被加入目標(biāo)資源所屬項(xiàng)目,您無法直接訪問資源。MaxCompute提供了Package授權(quán)機(jī)制,可以將資源及相應(yīng)權(quán)限打包為Package,其他項(xiàng)目安裝此Package后,即可解決跨項(xiàng)目訪問資源問題。本文為您介紹Package授權(quán)操作并提供示例供參考。
背景信息
假設(shè)某個(gè)阿里云賬號(hào)下有多個(gè)MaxCompute項(xiàng)目,其中項(xiàng)目A里有一批表、資源文件、自定義函數(shù)需要分享給其他項(xiàng)目使用,或需要分享給其他阿里云賬號(hào)內(nèi)的項(xiàng)目使用。通常您可以使用如下方法實(shí)現(xiàn)資源分享:
將其他項(xiàng)目中需要使用資源的用戶都添加到A項(xiàng)目,并逐個(gè)執(zhí)行授權(quán)操作。但該方法比較繁瑣,不推薦在跨項(xiàng)目訪問資源場(chǎng)景下使用。僅當(dāng)需要精細(xì)控制資源由單人使用,且申請(qǐng)人是本業(yè)務(wù)項(xiàng)目團(tuán)隊(duì)成員時(shí),建議使用該方式。更多授權(quán)語法信息,請(qǐng)參見ACL權(quán)限控制。
基于Package實(shí)現(xiàn)跨項(xiàng)目資源分享。
Package是一種跨項(xiàng)目共享數(shù)據(jù)及資源的機(jī)制。A項(xiàng)目的所有者對(duì)其他項(xiàng)目需要使用的資源進(jìn)行打包(也就是創(chuàng)建Package),然后許可其他項(xiàng)目安裝此Package。其他項(xiàng)目的所有者安裝Package之后,就可以自行管理Package是否需要進(jìn)一步授權(quán)給自己項(xiàng)目下的用戶。完整實(shí)現(xiàn)流程如下。
由上述流程可知,使用Package涉及兩個(gè)主體,Package主體信息及主體可執(zhí)行的操作如下。
主體 | 說明 | 可執(zhí)行的操作 | 主體角色 | 操作入口 |
Package創(chuàng)建者 | 所在的項(xiàng)目是資源提供方。將需要分享的資源及其操作權(quán)限進(jìn)行打包,然后許可Package使用者安裝使用。 | 資源所屬項(xiàng)目的項(xiàng)目所有者(Project Owner)或具備資源所屬項(xiàng)目的項(xiàng)目級(jí)別Super_Administrator角色的用戶。 | ||
Package使用者 | 所在的項(xiàng)目是資源使用方。安裝了資源提供方創(chuàng)建的Package之后,便可以直接跨項(xiàng)目訪問資源。 | 使用資源的項(xiàng)目的所有者(Project Owner)或具備使用資源項(xiàng)目的項(xiàng)目級(jí)別Super_Administrator和Admin角色的用戶。 | ||
使用限制
Package的使用限制如下:
一個(gè)Package中最多可以包含1000個(gè)資源。
一個(gè)Package最多允許安裝至10萬個(gè)MaxCompute項(xiàng)目中。
一個(gè)MaxCompute項(xiàng)目最多可以從另外一個(gè)MaxCompute項(xiàng)目安裝100個(gè)Package。
一個(gè)MaxCompute項(xiàng)目最多可以創(chuàng)建10萬個(gè)Package。
一個(gè)MaxCompute項(xiàng)目最多可以安裝10萬個(gè)Package。
創(chuàng)建Package
資源提供方在MaxCompute項(xiàng)目中創(chuàng)建Package。
命令格式
create package <package_name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
package_name
是
指定Package的名稱,項(xiàng)目?jī)?nèi)唯一。長(zhǎng)度不超過128個(gè)字符,可以包含字母、下劃線(_)或數(shù)字。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
假設(shè)Bob@aliyun.com是test_project_a的項(xiàng)目所有者,現(xiàn)需要允許其他項(xiàng)目訪問test_project_a中的部分資源。創(chuàng)建Package,命令示例如下。
--Bob進(jìn)入項(xiàng)目test_project_a。 use test_project_a; --創(chuàng)建Package。 create package datashare;
將資源添加至Package
將資源使用方需要的資源添加至創(chuàng)建的Package中。
命令格式
add <object_type> <object_name> to package <package_name> [with privileges <privileges>];
使用限制
不支持添加Project類型對(duì)象至Package。
注意事項(xiàng)
資源添加到Package時(shí),并非是以快照形式打包。后續(xù)資源數(shù)據(jù)變更時(shí),通過Package訪問的是資源的最新數(shù)據(jù)。
參數(shù)說明
參數(shù)名稱
是否必填
說明
object_type
是
指定待添加的資源類型,即對(duì)象類型。單次添加只能指定一個(gè)對(duì)象。
對(duì)象取值請(qǐng)參見權(quán)限列表。
object_name
是
指定資源的名稱。獲取方式如下:
表名稱:您可以通過MaxCompute客戶端執(zhí)行
show tables;
命令獲取表或視圖名稱。資源文件名稱:您可以通過MaxCompute客戶端執(zhí)行
list resources;
命令獲取資源名稱。函數(shù)名稱:您可以通過MaxCompute客戶端執(zhí)行
list functions;
命令獲取函數(shù)名稱。實(shí)例名稱:您可以通過MaxCompute客戶端執(zhí)行
show instances;
命令獲取實(shí)例名稱。
說明添加資源時(shí),支持使用通配符星號(hào)(*)。例如
add table * to package package_name;
表示將所有表添加至Package。添加資源時(shí),資源名稱不能加項(xiàng)目名前綴。例如,項(xiàng)目為A,需要添加A中的表table到某個(gè)Package中,則執(zhí)行添加操作時(shí),資源名不能寫為A.table,應(yīng)該直接寫為table。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。privileges
否
指定對(duì)資源的操作權(quán)限。當(dāng)未指定操作權(quán)限時(shí),默認(rèn)為Read、Describe、Select權(quán)限。資源及其權(quán)限被看作一個(gè)整體,添加后不可更新。如果需要更新,只能刪除Package關(guān)聯(lián)的資源后重新添加資源及權(quán)限。
操作取值請(qǐng)參見權(quán)限列表。
使用示例
將test_project_a項(xiàng)目中的資源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>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
object_type
是
指定待刪除的資源類型,即對(duì)象類型。單次刪除只能指定一個(gè)對(duì)象。
對(duì)象取值請(qǐng)參見權(quán)限列表。
object_name
是
指定資源的名稱。獲取方式如下:
表名稱:您可以通過MaxCompute客戶端執(zhí)行
show tables;
命令獲取表或視圖名稱。資源文件名稱:您可以通過MaxCompute客戶端執(zhí)行
list resources;
命令獲取資源名稱。函數(shù)名稱:您可以通過MaxCompute客戶端執(zhí)行
list functions;
命令獲取函數(shù)名稱。實(shí)例名稱:您可以通過MaxCompute客戶端執(zhí)行
show instances;
命令獲取實(shí)例名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
刪除Package datashare中已添加的表sale_detail,命令示例如下。
--刪除Package中的資源。 remove Table sale_detail from package datashare;
許可其他項(xiàng)目使用Package
資源提供方授予其他項(xiàng)目使用Package的權(quán)限。
命令格式
allow project <project_name> to install package <package_name> [using label <number>];
參數(shù)說明
參數(shù)名稱
是否必填
說明
project_name
是
指定可使用Package的MaxCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。number
否
用于增加一個(gè)Label權(quán)限控制策略,指定允許資源使用方訪問的敏感數(shù)據(jù)等級(jí)。被授權(quán)的MaxCompute項(xiàng)目可以訪問Package,但僅能訪問敏感等級(jí)小于等于number的數(shù)據(jù)。不指定時(shí),默認(rèn)為0級(jí)。
更多Label權(quán)限控制信息,請(qǐng)參見Label權(quán)限控制。
使用示例
允許test_project_b項(xiàng)目安裝test_project_a中已創(chuàng)建的Package datashare。命令示例如下。
--許可test_project_b安裝Package。 allow project test_project_b to install package datashare;
撤銷其他項(xiàng)目使用Package的許可
資源提供方撤銷授予其他項(xiàng)目使用Package的權(quán)限。
命令格式
disallow project <project_name> to install package <package_name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
project_name
是
指定待撤銷訪問Package權(quán)限的MaxCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
撤銷test_project_b項(xiàng)目可以安裝test_project_a中的Package datashare的權(quán)限。命令示例如下。
--撤銷Package授權(quán)許可。 disallow project test_project_b to install package datashare;
刪除Package
刪除已創(chuàng)建的Package。
命令格式
delete|drop package <package_name>;
注意事項(xiàng)
刪除Package會(huì)清除通過這個(gè)Package授予的權(quán)限信息。
參數(shù)說明
參數(shù)名稱
是否必填
說明
package_name
是
指定待刪除Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
刪除test_project_a中已創(chuàng)建的Package datashare。命令示例如下。
--刪除Package。 drop package datashare;
查看Package列表
在MaxCompute項(xiàng)目中查看已創(chuàng)建或已安裝的Package列表。
命令格式
show packages;
使用示例
查看test_project_a項(xiàng)目中創(chuàng)建或安裝的Package信息。命令示例如下。
--查看Package列表。 show packages;
返回結(jié)果如下。包含如下信息:
創(chuàng)建或安裝Package的名稱(PackageName)
創(chuàng)建時(shí)間(CreateTime)
Package所屬M(fèi)axCompute項(xiàng)目(SourceProject)
安裝時(shí)間(InstallTime)
狀態(tài)(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的詳細(xì)信息
在MaxCompute項(xiàng)目中查看已創(chuàng)建的Package詳細(xì)信息。
命令格式
describe package <package_name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
查看test_project_a項(xiàng)目中Package datashare包含的資源及權(quán)限信息。命令示例如下。
--查看Package詳情。 describe package datashare;
返回結(jié)果如下。包含如下信息:
Package創(chuàng)建時(shí)間(CreateTime)
Package的名稱(PackageName)
Package所屬M(fèi)axCompute項(xiàng)目(SourceProject)
Package資源類型(ObjectType)
Package資源名稱(ObjectName)
Package資源權(quán)限(ObjectPrivileges)
允許安裝Package的項(xiàng)目(ProjectName)
許可訪問等級(jí)(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
在目標(biāo)MaxCompute項(xiàng)目中安裝Package。
命令格式
install package <project_name>.<package_name>;
注意事項(xiàng)
Package會(huì)展開安裝,安裝完成后,您可以執(zhí)行
show packages;
命令查詢到安裝的Package,通過describe package <package_name>;
命令查看Package內(nèi)的資源及權(quán)限信息。參數(shù)說明
參數(shù)名稱
是否必填
說明
project_name
是
指定Package所屬M(fèi)axCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
在test_project_b項(xiàng)目中安裝test_project_a項(xiàng)目的Package datashare,假設(shè)Amy@aliyun.com為test_project_b的項(xiàng)目所有者。命令示例如下。
--Amy進(jìn)入項(xiàng)目test_project_b。 use test_project_b; --安裝Package。 install package test_project_a.datashare;
查看安裝的Package的詳細(xì)信息
在MaxCompute項(xiàng)目中查看已安裝的Package詳細(xì)信息。
命令格式
describe package <project_name>.<package_name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
project_name
是
指定Package所屬M(fèi)axCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
查看test_project_b項(xiàng)目中安裝的Package datashare包含的資源及權(quán)限信息。命令示例如下。
--查看Package詳情。 describe package test_project_a.datashare;
返回結(jié)果如下。包含如下信息:
Package創(chuàng)建時(shí)間(CreateTime)
Package的名稱(PackageName)
Package所屬M(fèi)axCompute項(xiàng)目(SourceProject)
Package資源類型(ObjectType)
Package資源名稱(ObjectName)
Package資源權(quán)限(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的權(quán)限
在安裝Package的MaxCompute項(xiàng)目中為用戶或角色授予訪問Package的權(quán)限。
被安裝的Package是一種獨(dú)立的MaxCompute對(duì)象類型。如果要訪問Package里的資源,您必須擁有該P(yáng)ackage的Read權(quán)限。如果請(qǐng)求者沒有Read權(quán)限,可以由項(xiàng)目所有者、具備Super_Administrator或Admin角色的用戶通過ACL權(quán)限控制方案完成授權(quán)。
命令格式
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;
注意事項(xiàng)
授權(quán)后,用戶或角色僅在安裝Package的項(xiàng)目中有權(quán)限訪問Package中的資源。如果需要精細(xì)化管控Package的權(quán)限,請(qǐng)參見Package的權(quán)限控制。
參數(shù)說明
參數(shù)名稱
是否必填
說明
actions
是
指定對(duì)資源的操作權(quán)限。固定取值為Read。
project_name
是
指定Package所屬M(fèi)axCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。name
是
指定被授權(quán)的用戶賬號(hào)或角色名稱。單次授權(quán)只能指定一個(gè)用戶或角色。
您可以通過MaxCompute客戶端執(zhí)行
list users;
或list roles;
命令獲取用戶賬號(hào)或角色名稱。使用示例
假設(shè)Bella為隸屬于Amy@aliyun.com的RAM用戶,現(xiàn)需要為Bella授予Package的訪問權(quán)限。命令示例如下。
--允許Bella訪問Package。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
撤銷為用戶或角色授予的訪問Package的權(quán)限
在安裝Package的MaxCompute項(xiàng)目中撤銷為用戶或角色授予的訪問Package的權(quán)限。
命令格式
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
actions
是
指定對(duì)資源的操作權(quán)限。固定取值為Read。
project_name
是
指定Package所屬M(fèi)axCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。name
是
指定待撤銷授權(quán)的用戶賬號(hào)或角色名稱。單次撤銷授權(quán)只能指定一個(gè)用戶或角色。
您可以通過MaxCompute客戶端執(zhí)行
list users;
或list roles;
命令獲取用戶賬號(hào)或角色名稱。使用示例
撤銷為Bella授予的Package訪問權(quán)限。命令示例如下。
--撤銷允許Bella訪問Package的權(quán)限。 revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;
卸載Package
為目標(biāo)MaxCompute項(xiàng)目卸載已安裝的Package。
命令格式
uninstall package <project_name>.<package_name>;
參數(shù)說明
參數(shù)名稱
是否必填
說明
project_name
是
指定Package所屬M(fèi)axCompute項(xiàng)目名稱。
您可以登錄MaxCompute控制臺(tái),左上角切換地域后,即可在項(xiàng)目管理頁簽獲取具體的MaxCompute項(xiàng)目名稱。
package_name
是
指定Package的名稱。
您可以通過MaxCompute客戶端執(zhí)行
show packages;
命令獲取已創(chuàng)建的Package信息。使用示例
卸載test_project_b項(xiàng)目中已安裝的Package datashare。命令示例如下。
--卸載Package。 uninstall package test_project_a.datashare;
Package使用示例
假設(shè)Bob是項(xiàng)目test_project_a的所有者。Amy是項(xiàng)目test_project_b的所有者。由于業(yè)務(wù)需要,Bob希望將其項(xiàng)目test_project_a中的某些資源(例如udtf.jar及表sale_detail)分享給Amy的項(xiàng)目test_project_b。且項(xiàng)目test_project_b的用戶RAM$Amy@aliyun.com:Bella需要訪問這些資源。以MaxCompute客戶端操作為例,操作流程如下:
Bob進(jìn)入項(xiàng)目test_project_a中創(chuàng)建Package。
--Bob進(jìn)入項(xiàng)目test_project_a。 use test_project_a; --創(chuàng)建Package。 create package datashare;
Bob為新創(chuàng)建的Package添加資源。
--將資源添加至Package。 add Resource udtf.jar to package datashare; add Table sale_detail to package datashare;
Bob允許項(xiàng)目test_project_b安裝Package。
--許可test_project_b安裝Package。 allow project test_project_b to install package datashare;
Amy進(jìn)入項(xiàng)目test_project_b中安裝Package。
--進(jìn)入test_project_b。 use test_project_b; --安裝Package。 install package test_project_a.datashare; --查看Package中的資源列表。 describe package test_project_a.datashare; --返回結(jié)果如下。 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的權(quán)限。
-授權(quán)Bella訪問Package。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
后續(xù)指引
完成Package創(chuàng)建及安裝后,您可以根據(jù)實(shí)際業(yè)務(wù)需要執(zhí)行如下操作:
相關(guān)文檔
使用CLONE TABLE實(shí)現(xiàn)不同賬號(hào)同地域的MaxCompute跨項(xiàng)目數(shù)據(jù)遷移,請(qǐng)參見使用CLONE TABLE實(shí)現(xiàn)同地域MaxCompute跨項(xiàng)目數(shù)據(jù)遷移。
不同地域間MaxCompute項(xiàng)目數(shù)據(jù)遷移(包含同賬號(hào)和不同賬號(hào)兩種場(chǎng)景),請(qǐng)參見通過跨項(xiàng)目數(shù)據(jù)訪問實(shí)現(xiàn)不同地域MaxCompute項(xiàng)目數(shù)據(jù)遷移。
使用DataWorks實(shí)現(xiàn)所有場(chǎng)景的MaxCompute跨項(xiàng)目數(shù)據(jù)遷移,請(qǐng)參見MaxCompute數(shù)據(jù)源。