MaxCompute支援列層級的許可權控制,但不支援行層級的許可權控制,本文結合案例為您介紹如何?行層級許可權控制。
業務情境
假設Project A中的表table_order是所有商家的訂單交易資訊表。該表可以開放給商家查看,但要求每個商家只能查看自己店鋪的訂單交易資訊。
方案設計
表table_order中有商家ID(sellerid),可以根據商家ID進行過濾,限制各個商家只能讀取自己的資料,因此需要實現行層級許可權控制。您可以通過如下方案實現行層級許可權控制需求:
- 方案一(推薦):在表table_order下遊單獨給每個商家建立獨立的視圖,將視圖賦權給對應的商家。這種方式可以滿足行層級許可權控制的需求。
- 方案二:在表table_order下遊單獨為每個商家建立獨立的表,將表賦權給對應的商家。這種方式可以滿足行層級許可權控制的需求,但會導致資料重複儲存。一旦table_order資料有更新,下遊的表也需要同步更新才能保持資料一致。
實現流程
以MaxCompute用戶端為例,通過建立視圖方式實現行層級許可權控制的具體流程如下:
- 使用阿里雲帳號安裝並登入MaxCompute本地用戶端。
- 在Project A中建立視圖。命令樣本如下。
create view <view_name> as select * from table_order WHERE sellerid='xxxx';
更多建立視圖資訊,請參見視圖操作。
- 在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跨專案訪問資源。
- 商家在自己的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>;