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