全部產品
Search
文件中心

MaxCompute:行層級許可權控制

更新時間:Jun 14, 2025

MaxCompute支援您通過建立視圖的方式實現行層級許可權控制,本文結合案例為您介紹具體實現方法。

背景資訊

MaxCompute推出了適合針對大量使用者定義規則的行級存取控制功能,可免去為每個使用者逐個建立共用對象的工作,並避免共用對象的冗餘儲存,但該方式會使基於原表的查詢計劃更加複雜,並且存在一定的限制。詳情請參見行級存取控制

若您需要對不同使用者和各自的過濾規則實現行級存取控制,可通過建立視圖或表並進行共用的方式實現。該方式支援在已過濾資料的基礎上進行計算,操作更為簡便和直觀。

業務情境

假設Project A中的表table_order是所有商家的訂單交易資訊表。該表可以開放給商家查看,但要求每個商家只能查看自己店鋪的訂單交易資訊。

方案設計

表table_order中有商家ID(sellerid),可以根據商家ID進行過濾,限制各個商家只能讀取自己的資料,因此需要實現行層級許可權控制。您可以通過如下方案實現行層級許可權控制需求:

  • 方案一(推薦):在表table_order下遊單獨給每個商家建立獨立的視圖,將視圖賦權給對應的商家。這種方式可以滿足行層級許可權控制的需求。

  • 方案二:在表table_order下遊單獨為每個商家建立獨立的表,將表賦權給對應的商家。這種方式可以滿足行層級許可權控制的需求,但會導致資料重複儲存。一旦table_order資料有更新,下遊的表也需要同步更新才能保持資料一致。

實現流程

以MaxCompute用戶端為例,通過建立視圖方式實現行層級許可權控制的具體流程如下:

  1. 使用阿里雲帳號安裝並登入MaxCompute本地用戶端

  2. 在Project A中建立視圖。命令樣本如下。

    create view <view_name> as select * from table_order WHERE sellerid='xxxx';

    更多建立視圖資訊,請參見視圖操作

  3. 在Project A中建立Package,通過Package資源共用方式將視圖授權給商家。命令樣本如下。

    --建立Package。
    create package <package_name>;
    --將表添加至Package中。
    add table <view_name> to package <package_name>;
    --將Package資源共用給商家。
    allow project <project_name> to install package <package_name>;

    更多Package使用資訊,請參見基於Package跨專案訪問資源

  4. 商家在自己的MaxCompute專案中安裝Package進而使用視圖。命令樣本如下。

    --在商家專案中安裝Package。
    install package <Project A>.<package_name>;
    --將Package的讀許可權賦予給商戶。
    grant read on package <Project A>.<package_name> to user <user_name>;
說明

本案例示範的是通過Package方式授權視圖許可權,安裝MaxCompute專案的所有者也可以直接執行如下命令將視圖的Select和Describe許可權授權給使用者。具體的使用方式取決於業務需求。

grant select,describe on table <view_name> to user <user_name>;