Hologres V3.0 以降では、RAM ロールと Hologres インスタンス上のアカウント間のマッピングを設定できます。これにより、アカウントを使用して RAM ロールを引き受けることで外部システムにアクセスできます。現在、この方法を使用して Data Lake Formation(DLF)2.0 および他の Hologres インスタンスにのみアクセスできます。このトピックでは、CREATE USER MAPPING ステートメントの使用方法と制限について説明します。
背景情報
CREATE USER MAPPING ステートメントを実行して、Hologres ログオンユーザー(BASIC ユーザーを含む)と外部サービスの Alibaba Cloud アカウント間のマッピングを作成できます。これにより、ユーザーは MaxCompute、DLF、Object Storage Service(OSS)、または別の Hologres データベースなどの外部サービスにアクセスできます。詳細については、「CREATE USER MAPPING」をご参照ください。
制限
Hologres インスタンスのスーパーユーザーまたは外部サーバーの所有者のみが、関連する権限を一般ユーザーに付与できます。外部サーバーに対する USAGE 権限を持つユーザーは、自身のためにユーザーマッピングを作成できます。
MaxCompute または DLF 1.0 のデータにアクセスするための RAM ロールのユーザーマッピングを作成することはできません。
構文
外部データベースの構成
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 ユーザー)、またはパブリックアカウントなど。パブリックアカウントはすべてのユーザーが使用できるため、注意して使用する必要があります。
Access_id
Hologres にログオンするために使用されるアカウントの AccessKey ID。Resource Access Management(RAM)コンソール にログオンして AccessKey ID を取得できます。
Access_key
Hologres にログオンするために使用されるアカウントの AccessKey シークレット。
DLF データソース
構文
CREATE USER MAPPING FOR "<user_name>" EXTERNAL DATABASE <ext_db_name> OPTIONS ( -- DLF1.0 の場合 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- DLF2.0 の場合 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx'] | [rolearn 'RoleARN'] );説明hologram::GrantAssumeRoleポリシーは、ユーザーが RAM ロールの Alibaba Cloud Resource Name(ARN)のユーザーマッピングを作成できるように RAM コンソールで設定する必要があります。Hologres は、このポリシーに基づいて、ユーザーが RAM ロールの ARN のユーザーマッピングを作成する権限を持っているかどうかを確認します。承認されたユーザーは、指定された RAM ロールの ARN と Hologres インスタンス上の任意のユーザーとの間でユーザーマッピングを作成できます。例:{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "hologram:GrantAssumeRole", "Resource": "<Role_ARN>" } ] }パラメーター
パラメーター
説明
user_name
権限を付与するアカウント。RAM ユーザー、Hologres 内部アカウント(BASIC ユーザー)、またはパブリックアカウントなど。パブリックアカウントはすべてのユーザーが使用できるため、注意して使用する必要があります。
ext_db_name
CREATE EXTERNAL DATABASE ステートメントを実行して Hologres に作成された外部データベース。外部データベースは、外部データソースのメタデータを Hologres にロードするために使用されます。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
access_id
Hologres にログオンするために使用されるアカウントの AccessKey ID。RAM コンソール にログオンして AccessKey ID を取得できます。
access_key
Hologres にログオンするために使用されるアカウントの AccessKey シークレット。
dlf_access_id
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
dlf_access_key
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
oss_access_id
Object Storage Service(OSS)に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
oss_access_key
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
rolearn
RAM ロールの ARN。RAM ロールのグローバルに一意なリソース識別子です。ARN は
acs:ram::<account-id>:role/<role-name>形式です。<role-name>は、小文字の RAM ロールの名前です。RAM ロールの ARN を表示する方法の詳細については、「RAM ロールの情報を表示する」をご参照ください。
設定済みの外部データベースのユーザーマッピングをクエリする
SELECT
datname,
usename,
eumoptions
FROM
pg_holo_external_user_mappings;外部サーバーの構成
MaxCompute データソース
構文
CREATE USER MAPPING FOR "<user_name>" SERVER odps_server -- サーバーは固定です。 OPTIONS ( access_id '<access_id>', access_key '<access_key>' );パラメーター
パラメーター
説明
user_name
権限を付与するアカウント。RAM ユーザー、Hologres 内部アカウント(BASIC ユーザー)、またはパブリックアカウントなど。パブリックアカウントはすべてのユーザーが使用できるため、注意して使用する必要があります。
access_id
Hologres にログオンするために使用されるアカウントの AccessKey ID。RAM コンソール にログオンして AccessKey ID を取得できます。
access_key
Hologres にログオンするために使用されるアカウントの AccessKey シークレット。
DLF データソース
構文
CREATE USER MAPPING FOR "<user_name>" SERVER <server_name> OPTIONS ( -- DLF1.0 の場合 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx', oss_access_id 'LTxxxxxxxxxx', oss_access_key 'y8xxxxxxxxxxxxx'] -- DLF2.0 の場合 [dlf_access_id 'LTxxxxxxxxxx', dlf_access_key 'y8xxxxxxxxxxxxx'] | [rolearn 'RoleARN'] );パラメーター
パラメーター
説明
user_name
権限を付与するアカウント。RAM ユーザー、Hologres 内部アカウント(BASIC ユーザー)、またはパブリックアカウントなど。パブリックアカウントはすべてのユーザーが使用できるため、注意して使用する必要があります。
server_name
外部サーバーの名前。MaxCompute データソースの場合、値は odps_server として固定されます。他のデータソースの場合、カスタム値を指定できます。詳細については、「HoloWebコンソールでOSSにマッピングされた外部テーブルを作成する」をご参照ください。
access_id
Hologres にログオンするために使用されるアカウントの AccessKey ID。RAM コンソール にログオンして AccessKey ID を取得できます。
access_key
Hologres にログオンするために使用されるアカウントの AccessKey シークレット。
dlf_access_id
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
dlf_access_key
DLF に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
oss_access_id
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID。
oss_access_key
OSS に対する読み取りおよび書き込み権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレット。
rolearn
RAM ロールの ARN。RAM ロールのグローバルに一意なリソース識別子です。ARN は
acs:ram::<account-id>:role/<role-name>形式です。<role-name>は、小文字の RAM ロールの名前です。RAM ロールの 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 ユーザー)、またはパブリックアカウントなど。パブリックアカウントはすべてのユーザーが使用できるため、注意して使用する必要があります。
server_name
Hologres 内のデータベース間でデータクエリを実装するために作成されたサーバーの名前。詳細については、「データベース間でデータをクエリする(ベータ)」をご参照ください。
access_id
Hologres にログオンするために使用されるアカウントの AccessKey ID。RAM コンソール にログオンして AccessKey ID を取得できます。
access_key
Hologres にログオンするために使用されるアカウントの AccessKey シークレット。
設定済みの内部データベースのユーザーマッピングをクエリする
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;例
外部データベース(推奨)
DLF 2.0 の Apache Paimon カタログをマッピングするために、Hologres インスタンスに外部データベースを作成します。インスタンスのスーパーユーザー権限を持つユーザー、または外部データベースの所有者のみが外部データベースにアクセスできます。
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***********';RAM コンソール で RAM ロールを作成し、Hologres で CREATE USER MAPPING ステートメントを実行して、RAM ロールと RAM ユーザー間のマッピングを作成します。
RAM ロールを作成し、ロールにポリシーをアタッチします。
RAM コンソールにログオンします。左側のナビゲーションペインで、[ID] > [ロール] を選択します。表示されるページで、[ロールの作成] をクリックします。[信頼できるエンティティの選択] で [alibaba Cloud サービス] を選択し、[ロールタイプ] で [標準サービスロール] を選択し、[RAM ロールの名前] パラメーターを設定し、[信頼できるサービスの選択] ドロップダウンリストから [hologres] を選択します。次に、[OK] をクリックします。
[ポリシー] ページで、[ポリシーの作成] をクリックします。[JSON] タブで、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" } ] }[ロール] ページで、RAM ロールを選択し、[権限の付与] をクリックして、RAM ロールにポリシーをアタッチします。

Hologres で CREATE USER MAPPING ステートメントを実行して、RAM ユーザーと RAM ロールのマッピングを作成します。これにより、RAM ユーザーは
ext_db_dlfデータベースに対する権限を取得します。CREATE USER MAPPING FOR "p4_203535926287167253" EXTERNAL DATABASE ext_db_dlf OPTIONS ( rolearn 'acs:ram::xxx:role/testramrole' );
RAM ユーザーとして Hologres コンソールにログオンし、SQL エディターを使用してデータをクエリします。
SELECT * FROM ext_db_dlf.dlf_db.paimon_table;
外部サーバー
このセクションでは、MaxCompute 外部テーブルに対する権限を Hologres BASIC アカウントに付与する方法について説明します。
Hologres に BASIC アカウントを作成します。
CREATE USER basicuser;odps_serverへのアクセス権限を BASIC アカウントに付与します。CREATE USER MAPPING FOR "basicuser" SERVER odps_server OPTIONS ( access_id 'LTxxxxxxxxxx', access_key 'y8xxxxxxxxxxxxx' );