全部產品
Search
文件中心

:基於Package跨專案訪問資源

更新時間:Jun 19, 2024

當您需要跨專案(包含跨帳號)訪問資源(對象)時,如果未被加入目標資源所屬專案,您無法直接存取資源。MaxCompute提供了Package授權機制,可以將資源及相應許可權打包為Package,其他專案安裝此Package後,即可解決跨專案訪問資源問題。本文為您介紹Package授權操作並提供樣本供參考。

背景資訊

假設某個阿里雲帳號下有多個MaxCompute專案,其中專案A裡有一批表、資源檔、自訂函數需要分享給其他專案使用,或需要分享給其他阿里雲帳號內的專案使用。通常您可以使用如下方法實現資源分享:

  • 將其他專案中需要使用資源的使用者都添加到A專案,並逐個執行授權操作。但該方法比較繁瑣,不推薦在跨專案訪問資源情境下使用。僅當需要精細控制資源由單人使用,且申請人是本商務專案團隊成員時,建議使用該方式。更多授權文法資訊,請參見ACL許可權控制

  • 基於Package實現跨專案資源分享。

    Package是一種跨專案共用資料及資源的機制。A專案的所有者對其他專案需要使用的資源進行打包(也就是建立Package),然後許可其他專案安裝此Package。其他專案的所有者安裝Package之後,就可以自行管理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的使用限制如下:

  • 一個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用戶端操作為例,操作流程如下:

  1. Bob進入專案test_project_a中建立Package。

    --Bob進入專案test_project_a。
    use test_project_a; 
    --建立Package。
    create package datashare;
  2. Bob為新建立的Package添加資源。

    --將資源添加至Package。
    add Resource udtf.jar to package datashare;
    add Table sale_detail to package datashare;
  3. Bob允許專案test_project_b安裝Package。

    --許可test_project_b安裝Package。
    allow project test_project_b to install package datashare;
  4. 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  |
    +--------------+------------------------------------------+------------------+
  5. Amy為Bella授予訪問Package的許可權。

    -授權Bella訪問Package。
    grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella; 

後續指引

完成Package建立及安裝後,您可以根據實際業務需要執行如下操作:

相關文檔