全部產品
Search
文件中心

MaxCompute:GRANT

更新時間:Jun 19, 2024

MaxCompute支援通過ACL(Access Control Lists)方式和Policy許可權控制方案授予使用者或角色對指定對象執行指定操作的許可權。本文為您介紹MaxCompute支援的ACL、Policy授權命令,並提供授權樣本供參考。

ACL許可權控制

  • 前提條件。

    使用ACL許可權控制方案前,請您確認已記錄好如下資訊:

    • 被授權人的帳號或角色名稱,且帳號或角色已添加至MaxCompute專案。阿里雲帳號格式為ALIYUN$阿里雲帳號,RAM使用者帳號格式為RAM$歸屬阿里雲帳號:RAM使用者名稱

      您可以通過MaxCompute用戶端執行list users;list roles;命令擷取帳號或角色資訊。

      如果需要新增使用者或角色,請參見使用者規劃與管理角色規劃

    • 授權物件類型、對象名稱及操作。

      更多個物件類型及操作資訊,請參見MaxCompute許可權

  • 使用限制。

    ACL許可權控制功能的使用限制如下:

    • ACL許可權控制只支援對已存在的對象、被授權人進行授權,可以避免刪除並重建同名對象所帶來的安全風險。

    • ACL許可權控制不支援通過[with grant option]子句授權。例如當使用者A授權使用者B可以訪問某個對象時,使用者B無法將許可權進一步授權給使用者C。

    • ACL授權為白名單(Allow)授權,不支援黑名單(Deny)授權。

  • 注意事項。

    使用ACL許可權控制功能的注意事項如下:

    • 如果刪除了對象,MaxCompute會自動撤銷與該對象關聯的所有ACL授權資訊。

    • 當一個使用者被移除後,與該使用者有關的授權仍然會被保留。一旦該使用者以後被再次添加到該專案時,該使用者的歷史授權存取權限將被重新啟用。如果需要徹底清除使用者的許可權資訊,請參見徹底清除被刪除使用者遺留的許可權資訊

  • 命令格式。

    ACL許可權控制命令格式如下:

    • ACL授權。

      grant <actions> on <object_type> <object_name> 
      [(<column_list>)] to <subject_type> <subject_name> 
      [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];
    • 列層級許可權控制。

      grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>;
      revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;

      參數說明如下。

      參數名稱

      是否必填

      說明

      actions

      指定被授予的操作許可權名稱。單次授權可以指定單個或多個操作。

      當有多個操作時,多個操作名稱之間使用英文逗號(,)分隔。操作取值請參見MaxCompute許可權

      object_type

      指定被授予的物件類型,即客體。單次授權只能指定一個客體。

      客體取值請參見MaxCompute許可權

      object_name

      指定被授予的對象的名稱。擷取方式如下:

      • 專案名稱:您可以登入MaxCompute控制台,左上方切換地區後,即可在專案管理頁簽擷取具體的MaxCompute專案名稱。

      • 表名稱:您可以通過MaxCompute用戶端執行show tables;命令擷取表或視圖名稱。

      • 資源名稱:您可以通過MaxCompute用戶端執行list resources;命令擷取資源名稱。

      • 函數名稱:您可以通過MaxCompute用戶端執行list functions;命令擷取函數名稱。

      • 執行個體名稱:您可以通過MaxCompute用戶端執行show instances;命令擷取執行個體ID。

      授權對象支援以萬用字元星號(*)來表達。例如,table taobao*表示所有以taobao開頭的表。

      說明

      授權給ROLE支援使用萬用字元星號(*);授權給USER不支援使用萬用字元。

      column_list

      僅當object_type為Table,且需要對錶進行列層級許可權控制時,需要配置該參數。單次授權可以指定單個或多個列名,列名之間使用英文逗號(,)分隔。

      說明

      該參數實現的是對指定表的指定列的Describe、Select、Alter、Update、Drop、ShowHistory、ALL許可權進行控制。如果表的列設定了敏感等級,可通過Label許可權控制功能,通過敏感等級標籤對訪問敏感性資料的許可權進行控制。

      privilegeproperties

      conditions

      從請求訊息來源及訪問方式等維度進行許可權控制。格式為"<var_name> <Operation> 常量" and "<var_name> <Operation> 常量" and ...,支援的var_nameOperation列表,請參見Conditions

      days

      指定許可權到期時間,單位為天。未指定該參數時,許可權預設長期有效。指定該參數時,許可權到期後,MaxCompute會自動清除許可權資訊。

      subject_type

      指定被授權人的類型。取值範圍如下:

      • USER:阿里雲帳號或RAM使用者

      • ROLE:角色

      subject_name

      指定被授權的使用者帳號或角色名稱。單次授權只能指定一個使用者或角色。

      您可以通過MaxCompute用戶端執行list users;list roles;命令擷取使用者帳號或角色名稱。

  • Conditions。

    conditions支援的var_nameOperation列表如下。

    var_name

    類型

    Operation

    說明

    acs:UserAgent

    STRING

    • StringEquals:=

    • StringNotEquals:<>

    • StringLike:like

    • StringNotLike:not like

    發送請求時的用戶端UserAgent。

    acs:Referer

    STRING

    發送請求時的HTTP referer。

    acs:SourceIp

    IP Address

    • IpAddress:in (...)

    • NotIpAddress:not in (...)

    發送請求時的用戶端IP地址。

    acs:SecureTransport

    BOOLEAN

    • True

    • False

    發送請求是否使用了安全通道,如HTTPS。

    acs:CurrentTime

    DATEANDTIME

    • DateEquals:=

    • DateNotEquals:<>

    • DateLessThan:<

    • DateLessThanEquals:<=

    • DateGreaterThan:>

    • DateGreaterThanEquals:>=

    Web Server接收到請求的時間,以ISO 8601格式表示,如2012-11-11T23:59:59Z。

  • 使用樣本。

    假設Bob@aliyun.com是test_project_a的專案所有者,Allen、Alice、Tom是隸屬於Bob@aliyun.com的RAM使用者。以MaxCompute用戶端操作為例,授權樣本如下:

    • 樣本一:為使用者授權

      在專案test_project_a中建立表sale_detail,並為使用者Allen授予表的讀取中繼資料(Describe)和讀取表資料(Select)許可權。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --建立一張分區表sale_detail。
      create table if not exists sale_detail
      (
      shop_name     string,
      customer_id   string,
      total_price   double
      )
      partitioned by (sale_date string, region string);
      --將使用者Allen添加為專案成員。
      add user RAM$Bob@aliyun.com:Allen;
      --為Allen授予許可權。
      grant Describe, Select on table sale_detail to USER RAM$Bob@aliyun.com:Allen;
      --查看使用者Allen的授權結果。
      show grants for RAM$Bob@aliyun.com:Allen; 
      --授權結果如下。
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Allen]
      A       projects/test_project_a/tables/sale_detail: Describe | Select
    • 樣本二:為使用者授權

      在樣本一中建立的表sale_detail基礎上,為使用者Alice授予表sale_detail中shop_name和customer_id兩列的所有操作許可權。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --將使用者Alice添加為專案成員。
      add user RAM$Bob@aliyun.com:Alice;
      --為Alice授予列層級控制許可權。
      grant All on table sale_detail (shop_name, customer_id) to USER RAM$Bob@aliyun.com:Alice;
      --查看使用者Alice的授權結果。
      show grants for RAM$Bob@aliyun.com:Alice; 
      --授權結果如下。
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Alice]
      A       projects/test_project_a/tables/sale_detail/customer_id: All
      A       projects/test_project_a/tables/sale_detail/shop_name: All
    • 樣本三:基於角色為多個使用者授予相同許可權

      為Alice、Tom及另一阿里雲帳號Lily@aliyun.com授予在專案test_project_a中建立執行個體、建立資源、建立函數、建立表以及查看專案所有物件類型的許可權。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --將使用者Alice、Tom、Lily@aliyun.com添加為專案成員。
      add user RAM$Bob@aliyun.com:Alice;
      add user RAM$Bob@aliyun.com:Tom;
      add user ALIYUN$Lily@aliyun.com;
      --建立角色Worker。
      create role Worker; 
      --為使用者綁定角色Worker。
      grant Worker TO RAM$Bob@aliyun.com:Alice; 
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      grant Worker TO ALIYUN$Lily@aliyun.com; 
      --為角色Worker授予在專案test_project_a中建立執行個體、建立資源、建立函數、建立表以及查看專案所有物件類型的許可權。
      grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker;
      --查看使用者Lily的授權結果。
      show grants for ALIYUN$Lily@aliyun.com; 
      --授權結果如下。表明使用者Lily已經具備上述許可權。
      [roles]
      worker
      
      Authorization Type: ACL
      [role/worker]
      A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List

Policy許可權控制

  • 前提條件

    使用Policy許可權控制方案前,請您確認已記錄好如下資訊:

    • 被授權角色的名稱,且角色已添加至MaxCompute專案。

      您可以通過MaxCompute用戶端執行list roles;命令擷取角色資訊。

      如果需要新增角色,請參見角色規劃

    • 授權物件類型、對象名稱及操作。

      更多個物件類型及操作資訊,請參見MaxCompute許可權

  • 使用限制

    Policy許可權控制只支援對已存在的角色進行授權。

  • 注意事項

    使用Policy許可權控制功能的注意事項如下:

    • 當白名單和黑名單授權資訊同時存在時,遵循黑名單優先原則。

    • Policy許可權控制允許對不存在的對象授權,當刪除對象時,與該對象關聯的Policy授權資訊不會被刪除,授權人需要注意刪除並重建同名對象所帶來的安全風險。

    • 當一個使用者被移除後,與該使用者有關的授權仍然會被保留。一旦該使用者以後被再次添加到該專案時,該使用者的歷史授權存取權限將被重新啟用。如果需要徹底清除使用者的許可權資訊,請參見徹底清除被刪除使用者遺留的許可權資訊

  • 命令格式

    Policy許可權控制命令格式如下:

    grant <actions> on <object_type> <object_name> 
    to ROLE <role_name> 
    privilegeproperties("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>" ,"expires"="<days>"]);
  • 參數說明

    參數名稱

    是否必填

    說明

    actions

    指定被授予的操作許可權名稱。單次授權可以指定多個操作。

    當有多個操作時,多個操作名稱之間使用英文逗號(,)分隔。操作取值請參見MaxCompute許可權

    object_type

    指定被授予的物件類型,即客體。單次授權只能指定一個客體。

    客體取值請參見MaxCompute許可權

    object_name

    指定被授予的對象的名稱。擷取方式如下:

    • 專案名稱:您可以登入MaxCompute控制台,左上方切換地區後,即可在專案管理頁簽擷取具體的MaxCompute專案名稱。

    • 表名稱:您可以通過MaxCompute用戶端執行show tables;命令擷取表或視圖名稱。

    • 資源名稱:您可以通過MaxCompute用戶端執行list resources;命令擷取資源名稱。

    • 函數名稱:您可以通過MaxCompute用戶端執行list functions;命令擷取函數名稱。

    • 執行個體名稱:您可以通過MaxCompute用戶端執行show instances;命令擷取執行個體ID。

    授權對象支援以萬用字元星號(*)來表達。例如,table taobao*表示所有以taobao開頭的表。

    說明

    授權給ROLE支援使用萬用字元星號(*);授權給USER不支援使用萬用字元。

    role_name

    指定被授權的角色名稱。單次授權只能指定一個角色。

    您可以通過MaxCompute用戶端執行list roles;命令擷取角色名稱。

    privilegeproperties

    policy

    固定取值為true。表示使用Policy許可權控制方案。

    allow

    白名單授權必填

    指定白名單授權機制。取值範圍如下:

    • true:表示允許對指定對象執行指定操作。

    • false:表示不允許對指定對象執行指定操作,即黑名單。

    conditions

    從請求訊息來源及訪問方式等維度進行許可權控制。詳細參數取值請參見Conditions

    days

    指定許可權到期時間,單位為天。未指定該參數時,許可權預設長期有效。指定該參數時,許可權到期後,MaxCompute會自動清除許可權資訊。

  • 樣本

    假設Bob@aliyun.com是test_project_a的專案所有者,Allen、Tom是隸屬於bob@aliyun.com的RAM使用者。Allen已被賦予test_project_a專案的Admin角色。以MaxCompute用戶端操作為例,授權樣本如下:

    • 樣本一:基於角色為使用者授權(黑名單)

      禁止Tom刪除以tb_開頭的表。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --建立角色Worker。
      create role Worker; 
      --將使用者Tom添加為專案成員。
      add user RAM$Bob@aliyun.com:Tom;
      --將角色Worker綁定至使用者Tom。
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      --禁止角色Worker刪除專案test_project_a中以tb_開頭的表。
      grant Drop on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
      --查看使用者Tom的授權結果。
      show grants for RAM$Bob@aliyun.com:Tom; 
      --授權結果如下。D表示禁止,禁止刪除以tb_開頭的表。
      Authorization Type: Policy
      [role/worker]
      D      projects/test_project_a/tables/tb_*: Drop
    • 樣本二:撤銷Policy授權(黑名單)

      基於樣本一,撤銷對使用者Tom的授權。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --收回使用者Tom綁定的角色Worker。
      revoke Worker from RAM$Bob@aliyun.com:Tom;
      --查看使用者Tom的授權結果。許可權列表無Drop許可權資訊。
      show grants for RAM$Bob@aliyun.com:Tom; 
    • 樣本三:基於角色為使用者授權(白名單)

      允許Tom修改以tb_開頭的表的資料。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --建立角色Worker。
      create role Worker; 
      --將使用者Tom添加為專案成員。
      add user RAM$Bob@aliyun.com:Tom;
      --將角色Worker綁定至使用者Tom。
      grant Worker TO RAM$Bob@aliyun.com:Tom; 
      --允許角色Worker修改專案test_project_a中以tb_開頭的表的資料。
      grant Update on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
      --查看使用者Tom的授權結果。
      show grants for RAM$Bob@aliyun.com:Tom; 
      --授權結果如下。A表示允許,可以更新以tb_開頭的表的資料。
      Authorization Type: Policy
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
    • 樣本四:撤銷Policy授權(白名單)

      基於樣本三,撤銷對使用者Tom的授權。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --收回使用者Tom綁定的角色Worker。
      revoke Worker from RAM$Bob@aliyun.com:Tom;
      --查看使用者Tom的授權結果。許可權列表無Update許可權資訊。
      show grants for RAM$Bob@aliyun.com:Tom; 
    • 樣本五:為具備內建角色的使用者進行精細化授權

      禁止Allen刪除專案test_project_a中的所有表。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --建立角色Worker。
      create role Worker; 
      --將角色Worker綁定至使用者Allen。
      grant Worker TO RAM$Bob@aliyun.com:Allen; 
      --禁止角色Worker刪除專案test_project_a中的所有表。
      grant Drop on table * to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
      --查看使用者Allen的授權結果。
      show grants for RAM$Bob@aliyun.com:Allen; 
      --授權結果如下。禁止刪除所有表。
      [roles]
      role_project_admin, worker
      
      Authorization Type: Policy
      [role/role_project_admin]
      A       projects/test_project_a: *
      A       projects/test_project_a/instances/*: *
      A       projects/test_project_a/jobs/*: *
      A       projects/test_project_a/offlinemodels/*: *
      A       projects/test_project_a/packages/*: *
      A       projects/test_project_a/registration/functions/*: *
      A       projects/test_project_a/resources/*: *
      A       projects/test_project_a/tables/*: *
      A       projects/test_project_a/volumes/*: *
      
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
      D       projects/test_project_a/tables/*: Drop
      
      Authorization Type: ObjectCreator
      AG      projects/test_project_a/tables/local_test: All
      AG      projects/test_project_a/tables/mr_multiinout_out1: All
      AG      projects/test_project_a/tables/mr_multiinout_out2: All
      AG      projects/test_project_a/tables/ramtest: All
      AG      projects/test_project_a/tables/wc_in: All
      AG      projects/test_project_a/tables/wc_in1: All
      AG      projects/test_project_a/tables/wc_in2: All
      AG      projects/test_project_a/tables/wc_out: All
    • 樣本六:為具備內建角色的使用者撤銷授權

      基於樣本五,撤銷對使用者Allen的授權。命令樣本如下。

      --Bob進入專案test_project_a。
      use test_project_a; 
      --收回使用者Allen綁定的角色Worker。
      revoke Worker from RAM$Bob@aliyun.com:Allen;
      --查看使用者Allen的授權結果。許可權列表無Drop許可權資訊。
      show grants for RAM$Bob@aliyun.com:Allen; 

為使用者授予角色

為使用者授予某個角色,使用者即可具備角色被賦予的許可權。

  • 使用限制。

    在對使用者授予角色前,您需要先為角色授予專案空間對象的相關操作許可權。詳情請參見為角色或使用者授權

  • 命令格式。

    grant <role_name> to <user_name>;
  • 參數說明。

    • role_name:必填。待授予的角色名稱。

    • user_name:必填。待授予角色的阿里雲使用者或RAM使用者帳號資訊。阿里雲帳號格式為ALIYUN$****@aliyun.com;,RAM使用者帳號格式為RAM$****

  • 使用樣本。

    --對阿里雲使用者test_user@aliyun.com賦予角色player。
    grant player to ALIYUN$test_user@aliyun.com;

為使用者或角色授予訪問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;

相關命令

  • CREATE PACKAGE:建立Package。

  • CREATE ROLE:在MaxCompute專案空間中建立角色。

  • REVOKE:撤銷對使用者或角色授予的訪問Package的許可權。