本文以案例分析的形式为您介绍如何实现行级别权限控制。
场景分析
Project A的table_order是所有商家的订单交易信息表。该表可以开放给商家查看,但每个商家只能查看自己家店铺的订单交易信息。
方案设计
table_order表中有商家id,可以根据商家id进行过滤,将各个商家限制于只读自己的数据,因此需要行级别的权限控制。MaxCompute不支持行级别的权限控制,但您可以通过如下方案实现行级别权限控制的需求:
- 方案一:在table_order表下游单独为每个商家创建独立的表(table),将表赋权给对应的商家。这种方式可以满足行级别权限控制的需求,但会导致数据重复存储。一旦table_order表数据有更新,下游的表也需要同步更新才能保持数据一致。
- 方案二:在table_order表下游单独给每个商家创建独立的视图(view),将视图赋权给对应的商家。这种方式可以满足行级别权限控制的需求,同时避免了方案一的弊端。
评估两个方案之后,建议您采用方案二,通过创建视图方式实现行级别权限控制。具体操作如下:
- 在Project A中创建视图。
CREATE VIEW <viewname> as select * from table_order WHERE sellerid='xxxx';
- 在Project A中创建package,通过package资源共享方式将view授权给商家。
create package <packagename>; add table <viewname> to package <packagename>; allow project <Projectname_seller> to install package <packagename>;
- 商家使用视图。
--命令均在商家的Project中操作 install package <ProjectA>.<packagename>; grant read on package <ProjectA>.<packagename> to user <username>;--商家项目中具体需要查询view的账号
说明 本案例演示的是通过package方式授权视图权限,您也可以直接ACL给user赋予视图的select和describe权限。具体的使用方式取决于现实业务需求。
grant select,describe on table <viewname> to user <username>;
在文档使用中是否遇到以下问题
更多建议
匿名提交