全部產品
Search
文件中心

:Package的許可權控制

更新時間:Jun 19, 2024

安裝Package後,如果您需要對Package進行更細微的許可權控制,例如控制只能訪問Package內的部分資源或控制只能訪問Package內表的部分列,您可以通過MaxCompute提供的細粒度授權(ACL)或LABEL授權實現。本文為您介紹如何通過這兩種方式為使用者或角色授權或撤銷Package內資源的相應許可權。

背景資訊

MaxCompute對Package提供如下兩種許可權控制策略。

許可權控制策略

說明

授權人

授權操作入口

細粒度授權(ACL)

在安裝Package的專案中,對Package內的部分資源通過ACL方式(基於對象)授權或撤銷授權。授權後,安裝Package的專案中的使用者即可對指定對象執行指定操作。

專案所有者(Project Owner)或具備Admin角色的使用者。

LABEL授權

在安裝Package的專案中,對Package內的表資源通過LABEL方式進行授權或撤銷授權。授權後,安裝Package的專案中的使用者僅能訪問不超過指定LABEL等級的敏感性資料資訊,在細粒度授權基礎上,實現更精細化的資料許可權管理。更多LABEL資訊,請參見Label許可權控制

細粒度授權(ACL)

  • 對Package內部分資源進行ACL授權,文法格式如下。

    --對指定對象授權。
    grant <actions> on <object_type> <object_name> to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
    --對錶的列授權。
    grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 查看Package內資源的ACL授權資訊,文法格式如下。

    show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 撤銷Package內部分資源的ACL授權,文法格式如下。

    --撤銷對象授權。
    revoke <actions> on <object_type> <object_name> from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
    --撤銷表的列授權。
    revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>",  "package"="<package_name>");

文法中各參數的含義如下:

  • actions:必填。指定授予的操作許可權。您可以執行describe package project_name.package_name;命令來查詢Package中打包的操作許可權。

  • object_type:必填。指定Package中對象的類型。您可以執行describe package project_name.package_name;命令來查詢Package中打包的物件類型。

  • object_name:必填。指定Package中對象的名稱。您可以執行describe package project_name.package_name;命令來查詢Package中打包的對象名稱。

  • name:必填。指定使用者或角色的名稱。擷取使用者或角色資訊,請參見查看使用者列表查看角色列表

  • table_name:必填。指定表的名稱。您可以執行describe package project_name.package_name;命令來查詢Package中打包的表名稱。

  • column_list:可選。指定列名。多個列名需要用英文逗號(,)分隔。

  • "refobject"="true":必填。表示對Package進行細粒度授權。

  • "refproject"="<project_name>":必填。指定Package所屬MaxCompute專案的名稱。

  • "package"="<package_name>":必填。指定Package的名稱。

LABEL授權

在細粒度授權基礎上,對Package內的表實現按照LABEL授權,使用者只能訪問指定LABEL層級的表資料。

  • 對Package內表資源進行LABEL授權,文法格式如下。

    grant label <number> on table <table_name[(<column_list>)]> to [user|role] <name>[with exp <days>] privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 查看Package的LABEL授權資訊,文法格式如下。

    show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 撤銷Package內表資源的LABEL授權,文法格式如下。

    revoke label on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

文法中各參數的含義如下:

  • number:指定安全許可標籤層級,即資料敏感等級。更多安全許可標籤資訊,請參見Label許可權控制

  • table_name:必填。指定表的名稱。您可以執行describe package project_name.package_name;命令來查詢Package中打包的表名稱。

  • column_list:可選。指定列名。多個列名需要用英文逗號(,)分隔。

  • name:必填。指定使用者或角色的名稱。擷取使用者或角色資訊,請參見查看使用者列表查看角色列表

  • days:可選。指定許可權有效時間長度。以天為單位。不指定時,預設到期時間是180天。

  • "refobject"="true":必填。表示對Package進行細粒度授權。

  • "refproject"="<project_name>":必填。指定Package所屬MaxCompute專案的名稱。

  • "package"="<package_name>":必填。指定Package的名稱。

使用樣本

基於基於Package跨專案訪問資源中的情境樣本,上述兩種授權方式的使用樣本如下:

  • 樣本1:細粒度授權。由John將Package中sampletable表的讀取表資料許可權(Select)授權給Bob。

    use prj2;
    --將sampletable表的讀取表資料許可權(Select)授權給Bob。
    grant Select on table sampletable to user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --查看Package內sampletable表的ACL授權資訊。
    show grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --撤銷對Bob的ACL授權。
    revoke Select on table sampletable from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
  • 樣本2:LABEL授權。假設sampletable表有3列(t1、t2、t3),且設定各列的LABEL層級為1、2、3。由John將Package中sampletable表的敏感等級為2的資料授權給Bob,有效時間長度為7天。

    use prj2;
    --開啟LabelSecurity安全機制。
    set LabelSecurity=true;
    
    --設定各列LABEL層級。
    set label 1 to table sampletable(t1);
    set label 2 to table sampletable(t2);
    set label 3 to table sampletable(t3);
    
    --將sampletable表的敏感等級為2的資料授權給Bob,有效時間長度為7天。上一樣本中Bob已經具備讀取表資料的許可權,則通過LABEL授權後,Bob具備讀取t2列資料的許可權。
    grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7 privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --查看Package內sampletable表的LABEL授權資訊。
    show label grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --撤銷對Bob的LABEL授權。
    revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    說明

    如果對Package內表資源進行了LABEL授權,則資源提供方授予其他專案使用Package的許可權時,需要增加Label和層級的聲明,命令文法規則如下。

    allowproject<project_name>toinstallpackage<package_name>usinglabel<number>;