全部產品
Search
文件中心

:行層級許可權控制

更新時間:Jun 19, 2024

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>;