文档

CREATE USER MAPPING

更新时间:

Hologres从V3.0版本开始,支持给实例内账号配置RAMRole的映射关系,登录账号通过扮演一个RAMRole来实现跨账号访问外部系统,当前仅支持使用RAMRole的方式访问DLF2.0数据源和其他Hologres实例。本文为您介绍CREATE USER MAPPING的用法及限制条件。

背景信息

User Mapping定义了Hologres登录用户和阿里云账号的映射关系,允许Hologres当前用户(包括BASIC用户)通过User Mapping的方式跨账号访问外部服务,如MaxCompute、DLF、OSS以及Hologres跨库查询。详情请参见PostgreSQL CREATE USER MAPPING

使用限制

  • 授予权限给普通用户需要是Hologres实例的SuperUser或者Foreign Server的Owner权限,以及拥有Foreign Server Usage权限的用户也可以为自己创建User Mapping。

  • MaxCompute数据源和DLF1.0不支持以RAMRole方式配置User Mapping。

语法说明

External Database配置方式

MaxCompute数据源

CREATE USER MAPPING FOR "<user_name>"
EXTERNAL DATABASE <ext_db_name>
OPTIONS
(
    access_id '<Access_id>',
    access_key '<Access_key>'
);

DLF数据源

CREATE USER MAPPING FOR "<user_name>"
EXTERNAL DATABASE <ext_db_name>
OPTIONS
(
    -- For DLF1.0
    [dlf_access_id 'LTxxxxxxxxxx',
    dlf_access_key 'y8xxxxxxxxxxxxx',
    oss_access_id 'LTxxxxxxxxxx',
    oss_access_key 'y8xxxxxxxxxxxxx'] 

    -- For DLF2.0
    [dlf_access_id 'LTxxxxxxxxxx',
    dlf_access_key 'y8xxxxxxxxxxxxx'] | 
    [rolearn 'RoleARN']
);
说明

当使用RoleARN方式配置User Mapping时,需要在RAM侧配置权限策略hologram::GrantAssumeRoleHologres通过该策略判断当前用户是否有创建到对应RoleARN的User Mapping的权限。通过该权限检查的用户,可以为holo中任意用户创建到对应RoleARN的User Mapping示例如下:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "hologram:GrantAssumeRole",
      "Resource": "<Role_ARN>"
    }
  ]
}

参数说明

参数名称

功能说明

user_name

待授权的账号,比如其他RAM子账号、Hologres内部账号(BASIC账号)、public(面向所有用户公开访问,请谨慎操作)。

ext_db_name

使用CREATE EXTERNAL DATABASE在Hologres实例中创建的外部数据库,用来加载外部数据源的元数据到Hologres,详见CREATE EXTERNAL DATABASE

access_id

当前访问账号的AccessKey ID,您可以单击RAM控制台,获取AccessKey ID。

access_key

当前访问账号的AccessKey Secret。

dlf_access_id

拥有读写DLF权限的阿里云账号或RAM账号的AccessKey ID。

dlf_access_key

拥有读写DLF权限的阿里云账号或RAM账号的AccessKey Secret。

oss_access_id

拥有读写OSS权限的阿里云账号或RAM账号的AccessKey ID。

oss_access_key

拥有读写OSS权限的阿里云账号或RAM账号的AccessKey Secret。

rolearn

角色ARN是角色的全局资源描述符,用来指定具体的角色,格式为acs:ram::<account-id>:role/<role-name>。其中,<role-name>部分会将角色的名称全部转换为小写。关于如何查看角色ARN,详情请参见查看RAM角色

Foreign Server配置方式

MaxCompute数据源

CREATE USER MAPPING FOR "<user_name>"
SERVER odps_server  -- 固定server
OPTIONS
(  
   access_id '<Access_id>',access_key '<Access_key>'
);

DLF数据源

CREATE USER MAPPING FOR "<user_name>"
SERVER <server_name>
OPTIONS
(
    -- For DLF1.0
    [dlf_access_id 'LTxxxxxxxxxx',
    dlf_access_key 'y8xxxxxxxxxxxxx',
    oss_access_id 'LTxxxxxxxxxx',
    oss_access_key 'y8xxxxxxxxxxxxx'] 

    -- For DLF2.0
    [dlf_access_id 'LTxxxxxxxxxx',
    dlf_access_key 'y8xxxxxxxxxxxxx'] | 
    [rolearn 'RoleARN']
);

Hologres数据源

CREATE USER MAPPING FOR "<user_name>"
SERVER <server_name>
OPTIONS (
  access_id '<access_id>', 
  access_key '<access_key>'
);

参数说明

参数名称

功能说明

user_name

待授权的账号,比如其他RAM子账号、Hologres内部账号(BASIC账号)、public(面向所有用户公开访问,请谨慎操作)。

server_name

Foriegn Server的名称,上一步骤自定义设置的名称,MaxCompute数据源是固定的内置server: odps_server。

access_id

当前访问账号的AccessKey ID,您可以单击RAM控制台,获取AccessKey ID。

access_key

当前访问账号的AccessKey Secret。

dlf_access_id

拥有读写DLF权限的阿里云账号或RAM账号的Accesskey ID。

dlf_access_key

拥有读写DLF权限的阿里云账号或RAM账号的Accesskey Secret。

oss_access_id

拥有读写OSS权限的阿里云账号或RAM账号的Accesskey ID。

oss_access_key

拥有读写OSS权限的阿里云账号或RAM账号的Accesskey Secret。

rolearn

角色ARN是角色的全局资源描述符,用来指定具体的角色,格式为acs:ram::<account-id>:role/<role-name>。其中,<role-name>部分会将角色的名称全部转换为小写。关于如何查看角色ARN,请参见查看RAM角色

使用示例

EXTERNAL DATABASE(推荐)

  1. 以DLF2.0数据源为例,首先创建一个External Database来关联DLF上的Paimon Catalog。

    CREATE EXTERNAL DATABASE ext_db_dlf
    WITH 
      metastore_type 'dlf-paimon' 
      catalog_type 'paimon' 
      dlf_region 'cn-hangzhou' 
      dlf_endpoint 'dlfnext-share.cn-hangzhou.aliyuncs.com' 
      dlf_catalog 'clg-paimon-d241aee***********'; 
  2. 创建完成后,该外部Database仅实例Superuser和DB Owner可访问,其他账号无法访问,接下来通过在RAM控制台创建RAMRole和Hologres侧CREATE USER MAPPING来给一个RAM子账号授权。

    1. RAM侧新建角色并完成策略配置。

      1. 登录RAM控制台,单击角色>创建角色,可信实体类型选择阿里云服务,角色类型选择普通服务角色,输入角色名称,选择受信服务交互式分析,单击完成

      2. 进入权限策略页面,单击创建权限策略>脚本编辑分别创建用于Hologres和DLF做权限检查的策略策略内容如下。

        Hologres需要的权限检查策略。

        {
            "Version": "1",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": "hologram:GrantAssumeRole",
                    "Resource": "acs:ram::xxx:role/testramrole"
                }
            ]
        }

        DLF需要的权限检查策略。

        {
            "Version": "1",
            "Statement": [
                {
                    "Action": "dlf:CheckPermissions",
                    "Resource": "*",
                    "Effect": "Allow"
                }
            ]
        }
      3. 进入角色页面,单击新增授权,添加上述两个权限策略。

        role2222

    2. Hologres侧通过CREATE USER MAPPING将ext_db_dlf数据库的权限授予RAM子账号。

      CREATE USER MAPPING FOR "p4_203535926287167253"
      EXTERNAL DATABASE ext_db_dlf
      OPTIONS
      (
          rolearn 'acs:ram::xxx:role/testramrole'
      );
  3. 使用子账号登录Hologres控制台,使用SQL编辑器进行查询。

    SELECT * FROM ext_db_dlf.dlf_db.paimon_table;

Foreign Server

以MaxCompute数据源为例,给一个Hologres BASIC账号授予访问MC外部表的权限。

  1. 在Hologres中创建BASIC账号。

    CREATE USER basicuser;
  2. 给BASIC账号授予odps_server的访问权限。

    CREATE USER MAPPING
    FOR "basicuser"
    SERVER odps_server
    OPTIONS
    (
        access_id 'LTxxxxxxxxxx',
        access_key 'y8xxxxxxxxxxxxx'
    );