當您需要跨專案(包含跨帳號)訪問資源(對象)時,如果未被加入目標資源所屬專案,您無法直接存取資源。MaxCompute提供了Package授權機制,可以將資源及相應許可權打包為Package,其他專案安裝此Package後,即可解決跨專案訪問資源問題。本文為您介紹Package授權操作並提供樣本供參考。
背景資訊
假設某個阿里雲帳號下有多個MaxCompute專案,其中專案A裡有一批表、資源檔、自訂函數需要分享給其他專案使用,或需要分享給其他阿里雲帳號內的專案使用。通常您可以使用如下方法實現資源分享:
將其他專案中需要使用資源的使用者都添加到A專案,並逐個執行授權操作。但該方法比較繁瑣,不推薦在跨專案訪問資源情境下使用。僅當需要精細控制資源由單人使用,且申請人是本商務專案團隊成員時,建議使用該方式。更多授權文法資訊,請參見ACL許可權控制。
基於Package實現跨專案資源分享。
Package是一種跨專案共用資料及資源的機制。A專案的所有者對其他專案需要使用的資源進行打包(也就是建立Package),然後許可其他專案安裝此Package。其他專案的所有者安裝Package之後,就可以自行管理Package是否需要進一步授權給自己專案下的使用者。完整實現流程如下。
由上述流程可知,使用Package涉及兩個主體,Package主體資訊及主體可執行檔操作如下。
主體 | 說明 | 可執行檔操作 | 主體角色 | 操作入口 |
Package建立者 | 所在的專案是資源提供方。將需要分享的資源及其操作許可權進行打包,然後許可Package使用者安裝使用。 | 資源所屬專案的專案所有者(Project Owner)或具備資源所屬專案的專案層級Super_Administrator角色的使用者。 | ||
Package使用者 | 所在的專案是資源使用方。安裝了資源提供方建立的Package之後,便可以直接跨專案訪問資源。 | 使用資源的專案的所有者(Project Owner)或具備使用資源專案的專案層級Super_Administrator和Admin角色的使用者。 | ||
使用限制
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關聯的資源後重新添加資源及許可權。
操作取值請參見許可權列表。
使用樣本
將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資訊。使用樣本
刪除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的所有者。Amy是專案test_project_b的所有者。由於業務需要,Bob希望將其專案test_project_a中的某些資源(例如udtf.jar及表sale_detail)分享給Amy的專案test_project_b。且專案test_project_b的使用者RAM$Amy@aliyun.com:Bella需要訪問這些資源。以MaxCompute用戶端操作為例,操作流程如下:
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;
後續指引
完成Package建立及安裝後,您可以根據實際業務需要執行如下操作:
相關文檔
使用CLONE TABLE實現不同帳號同地區的MaxCompute跨專案資料移轉,請參見使用CLONE TABLE實現同地區MaxCompute跨專案資料移轉。
不同地區間MaxCompute專案資料移轉(包含同帳號和不同帳號兩種情境),請參見通過跨專案資料訪問實現不同地區MaxCompute專案資料移轉。
使用DataWorks實現所有情境的MaxCompute跨專案資料移轉,請參見MaxCompute資料來源。