全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:Package的权限控制

更新时间:Jun 01, 2023

安装Package后,如果您需要对Package进行更细微的权限控制,例如控制只能访问Package内的部分资源或控制只能访问Package内表的部分列,您可以通过MaxCompute提供的细粒度授权(ACL)或LABEL授权实现。本文为您介绍如何通过这两种方式为用户或角色授权或撤销Package内资源的相应权限。

背景信息

MaxCompute对Package提供如下两种权限控制策略。

权限控制策略

说明

授权人

授权操作入口

细粒度授权(ACL)

在安装Package的项目中,对Package内的部分资源通过ACL方式(基于对象)授权或撤销授权。授权后,安装Package的项目中的用户即可对指定对象执行指定操作。

项目所有者(Project Owner)或具备Admin角色的用户。

LABEL授权

在安装Package的项目中,对Package内的表资源通过LABEL方式进行授权或撤销授权。授权后,安装Package的项目中的用户仅能访问不超过指定LABEL等级的敏感数据信息,在细粒度授权基础上,实现更精细化的数据权限管理。更多LABEL信息,请参见Label权限控制

细粒度授权(ACL)

  • 对Package内部分资源进行ACL授权,语法格式如下。

    --对指定对象授权。
    grant <actions> on <object_type> <object_name> to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
    --对表的列授权。
    grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 查看Package内资源的ACL授权信息,语法格式如下。

    show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 撤销Package内部分资源的ACL授权,语法格式如下。

    --撤销对象授权。
    revoke <actions> on <object_type> <object_name> from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
    --撤销表的列授权。
    revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>",  "package"="<package_name>");

语法中各参数的含义如下:

  • actions:必填。指定授予的操作权限。您可以执行describe package project_name.package_name;命令来查询Package中打包的操作权限。

  • object_type:必填。指定Package中对象的类型。您可以执行describe package project_name.package_name;命令来查询Package中打包的对象类型。

  • object_name:必填。指定Package中对象的名称。您可以执行describe package project_name.package_name;命令来查询Package中打包的对象名称。

  • name:必填。指定用户或角色的名称。获取用户或角色信息,请参见查看用户列表查看角色列表

  • table_name:必填。指定表的名称。您可以执行describe package project_name.package_name;命令来查询Package中打包的表名称。

  • column_list:可选。指定列名。多个列名需要用英文逗号(,)分隔。

  • "refobject"="true":必填。表示对Package进行细粒度授权。

  • "refproject"="<project_name>":必填。指定Package所属MaxCompute项目的名称。

  • "package"="<package_name>":必填。指定Package的名称。

LABEL授权

在细粒度授权基础上,对Package内的表实现按照LABEL授权,用户只能访问指定LABEL级别的表数据。

  • 对Package内表资源进行LABEL授权,语法格式如下。

    grant label <number> on table <table_name[(<column_list>)]> to [user|role] <name>[with exp <days>] privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 查看Package的LABEL授权信息,语法格式如下。

    show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 撤销Package内表资源的LABEL授权,语法格式如下。

    revoke label on table <table_name>[(<column_list>)] from [user|role] <name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

语法中各参数的含义如下:

  • number:指定安全许可标签级别,即数据敏感等级。更多安全许可标签信息,请参见Label权限控制

  • table_name:必填。指定表的名称。您可以执行describe package project_name.package_name;命令来查询Package中打包的表名称。

  • column_list:可选。指定列名。多个列名需要用英文逗号(,)分隔。

  • name:必填。指定用户或角色的名称。获取用户或角色信息,请参见查看用户列表查看角色列表

  • days:可选。指定权限有效时长。以天为单位。不指定时,默认过期时间是180天。

  • "refobject"="true":必填。表示对Package进行细粒度授权。

  • "refproject"="<project_name>":必填。指定Package所属MaxCompute项目的名称。

  • "package"="<package_name>":必填。指定Package的名称。

使用示例

基于基于Package跨项目访问资源中的场景示例,上述两种授权方式的使用示例如下:

  • 示例1:细粒度授权。由John将Package中sampletable表的读取表数据权限(Select)授权给Bob。

    use prj2;
    --将sampletable表的读取表数据权限(Select)授权给Bob。
    grant Select on table sampletable to user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --查看Package内sampletable表的ACL授权信息。
    show grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --撤销对Bob的ACL授权。
    revoke Select on table sampletable from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
  • 示例2:LABEL授权。假设sampletable表有3列(t1、t2、t3),且设置各列的LABEL级别为1、2、3。由John将Package中sampletable表的敏感等级为2的数据授权给Bob,有效时长为7天。

    use prj2;
    --开启LabelSecurity安全机制。
    set LabelSecurity=true;
    
    --设置各列LABEL级别。
    set label 1 to table sampletable(t1);
    set label 2 to table sampletable(t2);
    set label 3 to table sampletable(t3);
    
    --将sampletable表的敏感等级为2的数据授权给Bob,有效时长为7天。上一示例中Bob已经具备读取表数据的权限,则通过LABEL授权后,Bob具备读取t2列数据的权限。
    grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7 privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --查看Package内sampletable表的LABEL授权信息。
    show label grants on table sampletable privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    
    --撤销对Bob的LABEL授权。
    revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
    说明

    如果对Package内表资源进行了LABEL授权,则资源提供方授予其他项目使用Package的权限时,需要增加Label和级别的声明,命令语法规则如下。

    allowproject<project_name>toinstallpackage<package_name>usinglabel<number>;