MaxCompute支持通过SQL语句查询用户、角色、对象等的权限信息。本文为您介绍SQL权限查询语法并提供示例供参考。

基于MaxCompute提供的授权方案为用户或角色授权后,您可以查询如下权限信息。

查询场景查询操作操作人角色操作入口
查询角色的权限信息查询指定角色的权限及绑定的用户信息项目的所有者(Project Owner)、具备Super_Administrator或Admin角色的用户
查询用户的权限信息查询当前用户的权限及绑定的角色信息
查询指定用户的权限信息和绑定的角色信息
查询对象的ACL授权信息查询指定对象的ACL授权信息
查询Label授权信息查询当前用户可访问的所有高敏感等级数据表
查询当前用户可访问的指定等级的高敏感数据表
查询指定用户可访问的高敏感等级数据表
查询指定用户可访问的指定等级的高敏感数据表
查询可以访问指定敏感数据表的用户
查询可以访问指定敏感数据表的指定等级的用户
查询指定用户在指定敏感数据表中的权限
查询指定表中所有列的敏感等级
查询Package授权信息查询指定Package的授权信息
查询指定Package内资源的授权信息
查询指定Package内表的Label授权信息
查看用户权限或角色权限信息时,MaxCompute会在返回信息中使用如下标记字符:
  • A:表示Allow,即允许的操作权限。
  • D:表示Deny,即拒绝的操作权限。
  • C:表示With Condition,即带条件的授权。
  • G:表示With Grant Option,即可以对客体(Object)进行授权。

查询指定角色的权限及绑定的用户信息

  • 命令格式
    describe role <role_name>;
  • 参数说明
    参数名称是否必填说明
    role_name指定待查询权限的角色名称。

    您可以通过MaxCompute客户端执行list roles;命令获取角色名称。

  • 返回信息

    查询结果会返回ACL、Policy、Download权限信息。

  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Worker为项目中的角色。命令示例如下。

    describe role Worker;
    [users]
    RAM$Bob@aliyun.com:Allen
    
    Authorization Type: ACL
    A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
    A       projects/test_project_a/tables/bank_data: Download    
    
    Authorization Type: Policy
    A       projects/test_project_a/tables/bak*: Download
    A       projects/test_project_a/tables/sale_detail: Update
    A       projects/test_project_a/tables/tb_*: Download | Drop
    A       projects/test_project_a/tables/view_1: Drop

查询当前用户的权限及绑定的角色信息

  • 命令格式
    show grants;
  • 返回信息
    查询结果会返回如下信息:
    • 项目所有者:账号信息、项目列表信息。
    • 其他用户:绑定的角色信息、ACL、Policy及Download权限信息。
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。

    • 假设当前项目的访问者为Bob,执行show grants;命令,返回结果如下。
      [ALIYUN$Bob@aliyun.com]
      projects/test_project_a: Project Owner
    • 假设当前项目的访问者为Allen,执行show grants;命令,返回结果如下。
      [roles]
      worker
      
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Allen]
      A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
      A       projects/test_project_a/packages/project_test_b.datashare: Read
      
      Authorization Type: Policy
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Drop | Download

查询指定用户的权限信息和绑定的角色信息

  • 命令格式
    show grants for <user_name>;
  • 参数说明
    参数名称是否必填说明
    user_name指定待查询权限的用户名称。

    您可以通过MaxCompute客户端执行list users;命令获取用户名称。

  • 返回信息
    查询结果会返回如下信息:
    • 项目所有者:账号信息、项目列表信息。
    • 其他用户:绑定的角色信息、ACL、Policy及Download权限信息。
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。

    • 查询Bob的权限信息,命令示例如下。
      show grants for ALIYUN$Bob@aliyun.com;
      返回结果如下。
      [ALIYUN$Bob@aliyun.com]
      projects/test_project_a: Project Owner
    • 查询Allen的权限信息,命令示例如下。
      show grants for RAM$Bob@aliyun.com:Allen;
      返回结果如下。
      [roles]
      worker
      
      Authorization Type: ACL
      [user/RAM$Bob@aliyun.com:Allen]
      A       projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
      A       projects/test_project_a/packages/project_test_b.datashare: Read
      
      Authorization Type: Policy
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Drop | Download

查询指定对象的ACL授权信息

  • 命令格式
    show acl for <object_name> [on type <object_type>];
  • 参数说明
    参数名称是否必填说明
    object_name指定待查询对象的名称。
    • 项目名称:您可以登录MaxCompute控制台,左上角切换地域后,即可在项目管理页签获取具体的MaxCompute项目名称。查询类型为Project时,只能查询当前Project的信息。
    • 表名称:您可以通过MaxCompute客户端执行show tables;命令获取表或视图名称。
    • 资源名称:您可以通过MaxCompute客户端执行list resources;命令获取资源名称。
    • 函数名称:您可以通过MaxCompute客户端执行list functions;命令获取函数名称。
    • 实例名称:您可以通过MaxCompute客户端执行show instances;命令获取实例ID。
    object_type指定待查询对象的类型。
    取值如下:
    • Project:项目
    • Table:表
    • Resource:资源文件
    • Function:函数
    • Instance:实例

    未配置on type <object_type>时,默认的对象类型为Table。

  • 返回信息

    查询结果会返回具备对象操作权限的项目角色及用户信息、ACL权限信息。

  • 使用示例

    查看test_project_a项目中的对象授权信息。

    • 查询项目的权限信息,命令示例如下。
      show acl for test_project_a on type project;
      返回结果如下。
      Authorization Type: Implicit
      AG      project_owner/ALIYUN$Bob@aliyun.com: All
      AG      admin/ALIYUN$Bob@aliyun.com: All
      
      Authorization Type: ACL
      A       role/worker(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List
      A       role/worker1(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction | List
      A       role/worker2(projects/test_project_a): CreateTable | CreateResource | CreateInstance | CreateFunction
    • 查询表的权限信息,命令示例如下。
      show acl for sale_detail on type table;
      返回结果如下。
      Authorization Type: Implicit
      AG      project_owner/ALIYUN$Bob@aliyun.com: All
      AG      admin/ALIYUN$Bob@aliyun.com: All
      AG      object_creator/ALIYUN$Bob@aliyun.com: All
      
      Authorization Type: ACL
      A       user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/customer_id): Describe | Select
      A       user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/tables/sale_detail/shop_name): Describe | Select
    • 查询资源的权限信息,命令示例如下。
      show acl for udtf.jar on type resource;
      返回结果如下。
      Authorization Type: Implicit
      AG      project_owner/ALIYUN$Bob@aliyun.com: All
      AG      admin/ALIYUN$Bob@aliyun.com: All
      AG      object_creator/ALIYUN$Bob@aliyun.com: All
      
      Authorization Type: ACL
      A       user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/resources/udtf.jar): Read | Write
    • 查询函数的权限信息,命令示例如下。
      show acl for UDTFResource on type function;
      返回结果如下。
      Authorization Type: Implicit
      AG      project_owner/ALIYUN$Bob@aliyun.com: All
      AG      admin/ALIYUN$Bob@aliyun.com: All
      AG      object_creator/ALIYUN$Bob@aliyun.com: All
      
      Authorization Type: ACL
      A       role/worker1(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): Download
      A       user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/registration/functions/udtfresource): All
    • 查询实例的权限信息,命令示例如下。
      show acl for 20220105031923461ghu**** on type instance;
      返回结果如下。
      Authorization Type: Implicit
      AG      project_owner/ALIYUN$Bob@aliyun.com: All
      AG      admin/ALIYUN$Bob@aliyun.com: All
      AG      object_creator/ALIYUN$Bob@aliyun.com: All
      
      Authorization Type: ACL
      A       user/RAM$Bob@aliyun.com:Allen(acs:odps:*:projects/test_project_a/instances/20220105031923461ghu****): All

查询当前用户可访问的所有高敏感等级数据表

  • 命令格式
    show label grants;
  • 返回信息
    查询结果会返回如下信息:
    • 当前用户的访问许可等级(User Label)
    • 可访问的高敏感等级数据表(TableName)
    • 用户可访问的敏感数据级别(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。

    • 假设当前项目的访问者为Bob,执行show label grants;命令,返回结果如下。
      User Label: 0
      
      +--------------+--------------+--------------------------+
      | TableName    | GrantedLabel | Expires                  |
      +--------------+--------------+--------------------------+
      | bank_data    | 3            | 2022-07-04T16:30:47+0800 |
      +--------------+--------------+--------------------------+
      | bank_data_pt | 4            | 2022-07-04T16:36:04+0800 |
      +--------------+--------------+--------------------------+
    • 假设当前项目的访问者为Allen,执行show label grants;命令,返回结果如下。
      User Label: 1
      
      +-------------+--------------+--------------------------+
      | TableName   | GrantedLabel | Expires                  |
      +-------------+--------------+--------------------------+
      | sale_detail | 2            | 2022-01-09T11:43:27+0800 |
      +-------------+--------------+--------------------------+

查询当前用户可访问的指定等级的高敏感数据表

  • 命令格式
    show label <level> grants;
  • 参数信息
    参数名称是否必填说明
    level指定敏感等级。
  • 返回信息
    查询结果会返回如下信息:
    • 当前用户的访问许可等级(User Label)
    • 可访问的高敏感等级数据表(TableName)
    • 用户可访问的敏感数据级别(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。

    • 假设当前项目的访问者为Bob,执行命令如下。
      show label 3 grants;
      返回结果如下。
      User Label: 0
      
      +--------------+--------------+--------------------------+
      | TableName    | GrantedLabel | Expires                  |
      +--------------+--------------+--------------------------+
      | bank_data    | 3            | 2022-07-04T16:30:47+0800 |
      +--------------+--------------+--------------------------+
    • 假设当前项目的访问者为Allen,执行命令如下。
      show label 2 grants;
      返回结果如下。
      User Label: 1
      
      +-------------+--------------+--------------------------+
      | TableName   | GrantedLabel | Expires                  |
      +-------------+--------------+--------------------------+
      | sale_detail | 2            | 2022-01-09T11:43:27+0800 |
      +-------------+--------------+--------------------------+

查询指定用户可访问的高敏感等级数据表

  • 命令格式
    show label grants for user <user_name>;
  • 参数说明
    参数名称是否必填说明
    user_name指定待查询权限的用户名称。

    您可以通过MaxCompute客户端执行list users;命令获取用户名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前用户的访问许可等级(User Label)
    • 可访问的高敏感等级数据表(TableName)
    • 用户可访问的敏感数据级别(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。查询Allen可访问的高敏感等级数据表,命令示例如下。

    show label grants for user RAM$Bob@aliyun.com:Allen;
    返回结果如下。
    User Label: 2
    
    +-----------+--------------+--------------------------+
    | TableName | GrantedLabel | Expires                  |
    +-----------+--------------+--------------------------+
    | bank_data | 3            | 2022-07-04T16:29:32+0800 |
    +-----------+--------------+--------------------------+

查询指定用户可访问的指定等级的高敏感数据表

  • 命令格式
    show label <level> grants for user <user_name>;
  • 参数说明
    参数名称是否必填说明
    level指定敏感等级。
    user_name指定待查询权限的用户名称。

    您可以通过MaxCompute客户端执行list users;命令获取用户名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前用户的访问许可等级(User Label)
    • 可访问的高敏感等级数据表(TableName)
    • 用户可访问的敏感数据级别(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    假设Bob@aliyun.com为test_project_a的项目所有者,Allen为隶属于test_project_a的RAM用户,已经被添加到test_project_a中。查询Allen可访问的高敏感等级数据表,命令示例如下。

    show label 3 grants for user RAM$Bob@aliyun.com:Allen;
    返回结果如下。
    User Label: 2
    
    +-----------+--------------+--------------------------+
    | TableName | GrantedLabel | Expires                  |
    +-----------+--------------+--------------------------+
    | bank_data | 3            | 2022-07-04T16:29:32+0800 |
    +-----------+--------------+--------------------------+

查询可以访问指定敏感数据表的用户

  • 命令格式
    show label grants on table <table_name>;
  • 参数说明
    参数名称是否必填说明
    table_name指定表的名称。

    您可以通过MaxCompute客户端执行show tables;命令获取表名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前表的敏感数据等级范围(Sensitive Label Range)
    • 可访问的用户或角色(UserName)
    • 用户可访问的敏感等级(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    查询项目test_project_a中可访问高敏感数据表sale_detail的用户列表,命令示例如下。

    show label grants on table sale_detail;
    返回结果如下。
    Sensitive Label Range: [3, 4]
    
    +-------------------------------------------------+--------------+--------------------------+
    | UserName                                        | GrantedLabel | Expires                  |
    +-------------------------------------------------+--------------+--------------------------+
    | worker                                          | 4            | 2022-07-04T11:23:35+0800 |
    +-------------------------------------------------+--------------+--------------------------+
    | RAM$Bob@aliyun.com:Allen                        | 4            | 2022-07-04T17:54:00+0800 |
    +-------------------------------------------------+--------------+--------------------------+

查询可以访问指定敏感数据表的指定等级的用户

  • 命令格式
    show label <level> grants on table <table_name>;
  • 参数说明
    参数名称是否必填说明
    level指定敏感等级。
    table_name指定表的名称。

    您可以通过MaxCompute客户端执行show tables;命令获取表名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前表的敏感数据等级范围(Sensitive Label Range)
    • 可访问的用户或角色(UserName)
    • 用户可访问的敏感等级(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    查询项目test_project_a中可访问高敏感数据表sale_detail的用户列表,命令示例如下。

    show label 4 grants on table sale_detail;
    返回结果如下。
    Sensitive Label Range: [3, 4]
    
    +-------------------------------------------------+--------------+--------------------------+
    | UserName                                        | GrantedLabel | Expires                  |
    +-------------------------------------------------+--------------+--------------------------+
    | worker                                          | 4            | 2022-07-04T11:23:35+0800 |
    +-------------------------------------------------+--------------+--------------------------+
    | RAM$Bob@aliyun.com:Allen                        | 4            | 2022-07-04T17:54:00+0800 |
    +-------------------------------------------------+--------------+--------------------------+

查询指定用户在指定敏感数据表中的权限

  • 命令格式
    show label [<label>] grants on table <table_name> for user <user_name>;
  • 参数说明
    参数名称是否必填说明
    label指定敏感等级。
    table_name指定表的名称。

    您可以通过MaxCompute客户端执行show tables;命令获取表名称。

    user_name指定待查询权限的用户名称。

    您可以通过MaxCompute客户端执行list users;命令获取用户名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前用户的访问许可等级标签(User Label)
    • 用户可访问的表的列(Column)
    • 用户可访问的敏感等级(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例

    查询项目test_project_a中Allen可访问sale_detail的数据,命令示例如下。

    show label grants on table sale_detail for user RAM$Bob@aliyun.com:Allen;
    返回结果如下。
    User Label: 2
    +-------------+--------------+--------------------------+
    | Column      | GrantedLabel | Expires                  |
    +-------------+--------------+--------------------------+
    | customer_id | 4            | 2022-07-04T17:54:00+0800 |
    +-------------+--------------+--------------------------+
    | shop_name   | 4            | 2022-07-04T17:54:00+0800 |
    +-------------+--------------+--------------------------+
    | total_price | 4            | 2022-07-04T17:54:00+0800 |
    +-------------+--------------+--------------------------+

查询指定表中所有列的敏感等级

  • 命令格式
    describe <table_name>;
  • 参数说明
    参数名称是否必填说明
    table_name指定表的名称。

    您可以通过MaxCompute客户端执行show tables;命令获取表名称。

  • 返回信息

    查询结果会包含当前表的敏感等级(TableLabel)、表的列最高敏感等级(MaxLabel)、各列的敏感等级(Label)。

  • 使用示例

    查询项目test_project_a中表sale_detail及其列的敏感等级,命令示例如下。

    describe sale_detail;
    返回结果如下。
    +------------------------------------------------------------------------------------+
    | Owner: ALIYUN$Bob@aliyun.com | Project: project_test_a                             |
    | TableComment:                                                                      |
    +------------------------------------------------------------------------------------+
    | CreateTime:               2021-12-13 11:27:04                                      |
    | LastDDLTime:              2021-12-13 11:27:04                                      |
    | LastModifiedTime:         2021-12-13 11:27:26                                      |
    +------------------------------------------------------------------------------------+
    | TableLabel:               3                                                        |
    | MaxLabel:                 L4                                                       |
    +------------------------------------------------------------------------------------+
    | InternalTable: YES      | Size: 784                                                |
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field           | Type       | Label | Comment                                     |
    +------------------------------------------------------------------------------------+
    | shop_name       | string     | 4     |                                             |
    | customer_id     | string     | 4     |                                             |
    | total_price     | double     | 3     |                                             |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | sale_date       | string     |                                                     |
    | region          | string     |                                                     |
    +------------------------------------------------------------------------------------+

查询指定Package的授权信息

  • 命令格式
    show acl for <project_name>.<package_name> on type package;
  • 参数说明
    参数名称是否必填说明
    project_name指定待查询Package所属项目名称。

    您可以通过MaxCompute客户端执行describe package <package_name>;命令查询Package所属项目名称。

    package_name指定待查询Package的名称。

    您可以通过MaxCompute客户端执行show packages;命令查询Package名称。

  • 返回信息

    查询结果会返回具备对象操作权限的项目内置角色及账号信息、ACL权限信息。

  • 使用示例
    查看test_project_b项目中安装的datashare Package的授权信息。命令示例如下。
    show acl for test_project_b.datashare on type package;
    返回结果如下。
    Authorization Type: Implicit
    AG      project_owner/ALIYUN$Bob@aliyun.com: All
    AG      admin/ALIYUN$Bob@aliyun.com: All
    
    Authorization Type: ACL
    A       user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_b/packages/test_project_a.datashare): Read

查询指定Package内资源的授权信息

  • 命令格式
    show grants on <object_type> <object_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package
    _name>");
  • 参数说明
    参数名称是否必填说明
    object_type指定待查询Package内的资源类型。

    您可以通过MaxCompute客户端执行describe package <project_name>.<package_name>;命令查询Package内的资源类型。

    object_name指定待查询资源的名称。

    您可以通过MaxCompute客户端执行describe package <project_name>.<package_name>;命令查询Package内的资源名称。

    project_name指定待查询Package所属项目名称。

    您可以通过MaxCompute客户端执行describe package <project_name>.<package_name>;命令查询Package所属项目名称。

    package_name指定待查询Package的名称。

    您可以通过MaxCompute客户端执行show packages;命令查询Package名称。

  • 返回信息

    查询结果会返回具备对象操作权限的项目内置角色及用户、ACL权限信息。

  • 使用示例
    查看安装的datashare Package中表sale_detail的授权信息。命令示例如下。
    show grants on Table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
    返回结果如下。
    Authorization Type: Implicit
    AG      project_owner/: All
    
    Authorization Type: InstalledObjecACL
    [datashare]
    A       user/RAM$Amy@aliyun.com:Bella(acs:odps:*:projects/test_project_a/tables/sale_detail): Select

查询指定Package内表的Label授权信息

  • 命令格式
    show label grants on table <table_name> privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");
  • 参数说明
    参数名称是否必填说明
    table_name指定待查询Package内的表名称。

    您可以通过MaxCompute客户端执行describe package <project_name>.<package_name>;命令查询Package内的表名称。

    project_name指定待查询Package所属项目名称。

    您可以通过MaxCompute客户端执行describe package <package_name>;命令查询Package所属项目名称。

    package_name指定待查询Package的名称。

    您可以通过MaxCompute客户端执行show packages;命令查询Package名称。

  • 返回信息
    查询结果会返回如下信息:
    • 当前表的敏感数据等级范围(Sensitive Label Range)
    • 可访问的用户或角色(UserName)
    • 用户可访问的敏感等级(GrantedLabel)
    • 权限过期时间(Expires)
  • 使用示例
    查看安装的datashare Package中表sale_detail的Label授权信息。命令示例如下。
    show label grants on table sale_detail privilegeproperties ("refobject"="true", "refproject"="test_project_a", "package"="datashare");
    返回结果如下。
    Sensitive Label Range: [2, 4]
    
    +-------------------------------------------------+--------------+--------------------------+
    | UserName                                        | GrantedLabel | Expires                  |
    +-------------------------------------------------+--------------+--------------------------+
    | RAM$Amy@aliyun.com:Bella                        | 3            | 2022-07-12T22:24:24+0800 |
    +-------------------------------------------------+--------------+--------------------------+