外部模式内对联邦外表授权

更新时间:
复制为 MD 格式

外部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下的表

  • 所需权限

    SchemaList权限

  • 示例步骤

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

    GRANT List ON schema es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;
    1. 俩出某个External Schema下的表。

    SHOW tables IN es_hive3;

查询某个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;