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