外部Schema内对联邦外表授权

外部Schema内对联邦外表授权

当外部Schema创建成功后,其表的所有者归属于外部Schema的账号。如果您需要将外部Schema权限或表操作权限授予其他用户,请执行下述操作。

重要
  • 由于MaxCompute在湖仓一体模式下不持久化数据源的元数据,权限策略依据数据源对象名称管理。数据源对象名称变更会导致授权失效,须通过Revoke命令或删除Policy方式移除授权;未及时移除可能导致新同名对象继承旧策略的权限定义,允许原用户获得外部项目中的数据源新同名对象的非预期权限。

  • 开启Project内租户对象鉴权后,创建外部Schema之前需要将当前项目挂载在外部数据源上,如果没有提前进行挂载操作,会在创建外部Schema的时候报错

假设创建和管理External Schema的项目名称为test_lakehouse_project:

操作

所需权限

示例步骤

创建External Schema

  • ProjectCreateSchema权限。

  • 如果开启项目级别租户资源访问控制,需要Foreign ServerUsage权限。

  1. 指定当前项目,并授予项目CreateSchema权限。

    -- 指定当前项目
    use test_lakehouse_project;
    
    -- 为RAM用户授予项目的CreateSchema权限
    GRANT CreateSchema ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. (可选)如果开启了项目级别租户资源访问控制,且已经完成外部数据源与当前项目的挂载配置,在项目内对用户的授权如下:

    -- 为当前项目空间增加RAM账号体系
    ADD accountprovider ram;
    
    -- 添加ram用户
    ADD USER `RAM$xxx@test.aliyunid.com:test_user`;
    
    -- 创建项目角色
    CREATE role test_lakhouse_role;
    
    -- 为项目角色添加policy,允许使用外部数据源
    put policy D:\bin\allow.policy ON role test_lakhouse_role;
    
    -- 将RAM用户添加到项目角色
    GRANT role test_lakhouse_role TO `RAM$xxx@test.aliyunid.com:test_user`;

    其中allow.policy文件内容如下:

    {
      "Version": "1",
      "Statement": [{
        "Action": "odps:Usage",
        "Effect": "Allow",
        "Resource": ["acs:odps:*:servers/fs_hive"]
      }]
    }
  3. 创建External Schema。

    CREATE EXTERNAL SCHEMA IF NOT EXISTS es_hive3
    with fs_hive
    ON 'default' ;

查询全部External Schema

ProjectCreateInstanceList权限。

  1. RAM用户授予项目CreateInstance权限。

    GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. 授予项目List权限。

    GRANT List ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;
  3. 查看全部Schema。

    SHOW schemas;

查询某个External Schema

SchemaDescribe权限。

  1. RAM用户授予某SchemaDescribe权限。

    GRANT DESCRIBE ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. 查询某个External Schema。

    DESC SCHEMA es_hive3;

修改External Schema属性

目前暂不支持修改External Schema属性。

删除某个External Schema

SchemaDrop权限。

  1. RAM用户授予某SchemaDrop权限。

    GRANT DROP ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. 删除某个External Schema。

    DROP SCHEMA es_hive3;

使用某个External Schema

  • 普通三层模式项目不涉及。

  • 当项目从两层模式升级为三层模式时,需要SchemaDescribe权限。

指定当前使用某个External Schema。

USE SCHEMA es_hive3;

若项目从两层模式升级为三层模式,需要对指定的Schema授予Describe权限。

GRANT DESCRIBE ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;

查询某个External Schema下的表

Schema内表的Select权限

  1. RAM用户授予某Schema内某张表的Select权限。

    GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. 查询某个External Schema下的表。

    SELECT * FROM es_hive3.t1;

将某个External Schema下的表数据导入至内部表

  • Schema中表的Select权限。

  • ProjectCreateTable、CreateInstance权限。

  1. RAM用户授予项目CreateTable权限。

    GRANT CreateTable ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;
  2. 授予项目CreateInstance权限。

    GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;
  3. 授予对某张表Select权限。

    GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;
  4. 导入某个External Schema中的表数据至内部表。

    CREATE TABLE default.t1_copy_ram3 AS SELECT * FROM t1;