全部產品
Search
文件中心

Hologres:CREATE USER MAPPING

更新時間:Nov 14, 2024

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>'
    );
  • 參數說明

    參數名稱

    描述

    user_name

    待授權的帳號,比如其他RAM使用者(子帳號)、Hologres內部帳號(BASIC帳號)、public(面向所有使用者公開訪問,請謹慎操作)。

    Access_id

    當前訪問帳號的AccessKey ID,您可以單擊RAM控制台,擷取AccessKey ID。

    Access_key

    當前訪問帳號的AccessKey Secret。

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的許可權。具備該許可權的使用者,可以在Hologres中為任意使用者建立到對應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角色

查詢外部資料庫已配置的USER MAPPING

SELECT
    datname,
    usename,
    eumoptions
FROM
    pg_holo_external_user_mappings;

Foreign Server配置方式

MaxCompute資料來源

  • 文法

    CREATE USER MAPPING FOR "<user_name>"
    SERVER odps_server  -- 固定server
    OPTIONS
    (  
       access_id '<access_id>', 
       access_key '<access_key>'
    );
  • 參數說明

    參數名稱

    描述

    user_name

    待授權的帳號,比如其他RAM使用者(子帳號)、Hologres內部帳號(BASIC帳號)、public(面向所有使用者公開訪問,請謹慎操作)。

    access_id

    當前訪問帳號的AccessKey ID,您可以單擊RAM控制台,擷取AccessKey ID。

    access_key

    當前訪問帳號的AccessKey Secret。

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']
    );
  • 參數說明

    參數名稱

    描述

    user_name

    待授權的帳號,比如其他RAM使用者(子帳號)、Hologres內部帳號(BASIC帳號)、public(面向所有使用者公開訪問,請謹慎操作)。

    server_name

    Foriegn Server的名稱,上一步驟自訂設定的名稱,MaxCompute資料來源是固定的內建server: odps_server。詳情請參見建立Foreign 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角色

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

    Hologres實現跨庫查詢所建立的Server。詳情請參見跨庫查詢(Beta)

    access_id

    當前訪問帳號的AccessKey ID,您可以單擊RAM控制台,擷取AccessKey ID。

    access_key

    當前訪問帳號的AccessKey Secret。

查詢內部資料庫已配置的USER MAPPING

SELECT
    um.srvname AS "Server",
    um.usename AS "User name"
FROM
    pg_catalog.pg_user_mappings um
WHERE
    um.srvname != 'query_log_store_server'
ORDER BY 1, 2;

使用樣本

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'
    );