MaxCompute支援您通過建立視圖的方式實現行層級許可權控制,本文結合案例為您介紹具體實現方法。
背景資訊
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>;