外部Schema内对联邦外表授权
当外部Schema创建成功后,其表的所有者归属于外部Schema的账号。如果需要将外部Schema权限或表操作权限授予其他用户,请执行下述操作。
由于MaxCompute在湖仓一体模式下不持久化数据源的元数据,权限策略依据数据源对象名称管理。数据源对象名称变更会导致授权失效,须通过Revoke命令或删除Policy方式移除授权;未及时移除可能导致新同名对象继承旧策略的权限定义,允许原用户获得外部项目中的数据源新同名对象的非预期权限。
开启Project内租户对象鉴权后,创建外部Schema之前需要将当前项目挂载在外部数据源上,如果没有提前进行挂载操作,会在创建外部Schema的时候报错
假设创建和管理External Schema的项目名称为test_lakehouse_project。
创建External Schema
所需权限
Project的CreateSchema权限。
如果开启项目级别租户资源访问控制,需要Foreign Server的Usage权限。
示例步骤
指定当前项目,并授予项目CreateSchema权限。
-- 指定当前项目 use test_lakehouse_project; -- 为RAM用户授予项目的CreateSchema权限 GRANT CreateSchema ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;(可选)如果开启了项目级别租户资源访问控制,且已经完成外部数据源与当前项目的挂载配置,在项目内对用户的授权如下:
-- 为当前项目空间增加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"] }] }创建External Schema。
CREATE EXTERNAL SCHEMA IF NOT EXISTS es_hive3 with fs_hive ON 'default' ;
查询全部External Schema
所需权限
Project的CreateInstance和List权限。
示例步骤
为RAM用户授予项目CreateInstance权限。
GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;授予项目List权限。
GRANT List ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;查看全部Schema。
SHOW schemas;
查询某个External Schema
所需权限
Schema的Describe权限。
示例步骤
为RAM用户授予某Schema的Describe权限。
GRANT DESCRIBE ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;查询某个External Schema。
DESC SCHEMA es_hive3;
修改External Schema属性
目前暂不支持修改External Schema属性。
删除某个External Schema
所需权限
Schema的Drop权限。
示例步骤
为RAM用户授予某Schema的Drop权限。
GRANT DROP ON SCHEMA es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;删除某个External Schema。
DROP SCHEMA es_hive3;
使用某个External Schema
所需权限
普通三层模式项目不涉及。
当项目从两层模式升级为三层模式时,需要Schema的Describe权限。
示例步骤
指定当前使用某个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的List权限
示例步骤
为RAM用户授予某Schema的List权限。
GRANT List ON schema es_hive3 TO USER RAM$xxx@test.aliyunid.com:test_user;俩出某个External Schema下的表。
SHOW tables IN es_hive3;
查询某个External Schema下的表
所需权限
Schema内表的Select权限。
示例步骤
为RAM用户授予某Schema内某张表的Select权限。
GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;查询某个External Schema下的表。
SELECT * FROM es_hive3.t1;
将某个External Schema下的表数据导入至内部表
所需权限
Schema中表的Select权限。
Project的CreateTable、CreateInstance权限。
示例步骤
为RAM用户授予项目CreateTable权限。
GRANT CreateTable ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;授予项目CreateInstance权限。
GRANT CreateInstance ON project test_lakehouse_project TO USER RAM$xxx@test.aliyunid.com:test_user;授予对某张表Select权限。
GRANT SELECT ON TABLE es_hive3.t1 TO USER RAM$xxx@test.aliyunid.com:test_user;导入某个External Schema中的表数据至内部表。
CREATE TABLE default.t1_copy_ram3 AS SELECT * FROM t1;