CREATE USER MAPPING
Hologres從V3.0版本開始,支持給實(shí)例內(nèi)賬號配置RAMRole的映射關(guān)系,登錄賬號通過扮演一個(gè)RAMRole來實(shí)現(xiàn)跨賬號訪問外部系統(tǒng),當(dāng)前僅支持使用RAMRole的方式訪問DLF2.0數(shù)據(jù)源和其他Hologres實(shí)例。本文為您介紹CREATE USER MAPPING的用法及限制條件。
背景信息
User Mapping定義了Hologres登錄用戶和阿里云賬號的映射關(guān)系,允許Hologres當(dāng)前用戶(包括BASIC用戶)通過User Mapping的方式跨賬號訪問外部服務(wù),如MaxCompute、DLF、OSS以及Hologres跨庫查詢。詳情請參見PostgreSQL CREATE USER MAPPING。
使用限制
授予權(quán)限給普通用戶需要是Hologres實(shí)例的SuperUser或者Foreign Server的Owner權(quán)限,以及擁有Foreign Server Usage權(quán)限的用戶也可以為自己創(chuàng)建User Mapping。
MaxCompute數(shù)據(jù)源和DLF1.0不支持以RAMRole方式配置User Mapping。
語法說明
External Database配置方式
MaxCompute數(shù)據(jù)源
CREATE USER MAPPING FOR "<user_name>"
EXTERNAL DATABASE <ext_db_name>
OPTIONS
(
access_id '<Access_id>',
access_key '<Access_key>'
);
DLF數(shù)據(jù)源
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']
);
當(dāng)使用RoleARN方式配置User Mapping時(shí),需要在RAM側(cè)配置權(quán)限策略hologram::GrantAssumeRole
,Hologres通過該策略判斷當(dāng)前用戶是否有創(chuàng)建到對應(yīng)RoleARN的User Mapping的權(quán)限。通過該權(quán)限檢查的用戶,可以為holo中任意用戶創(chuàng)建到對應(yīng)RoleARN的User Mapping。示例如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "hologram:GrantAssumeRole",
"Resource": "<Role_ARN>"
}
]
}
參數(shù)說明
參數(shù)名稱 | 功能說明 |
user_name | 待授權(quán)的賬號,比如其他RAM子賬號、Hologres內(nèi)部賬號(BASIC賬號)、public(面向所有用戶公開訪問,請謹(jǐn)慎操作)。 |
ext_db_name | 使用CREATE EXTERNAL DATABASE在Hologres實(shí)例中創(chuàng)建的外部數(shù)據(jù)庫,用來加載外部數(shù)據(jù)源的元數(shù)據(jù)到Hologres,詳見CREATE EXTERNAL DATABASE。 |
access_id | 當(dāng)前訪問賬號的AccessKey ID,您可以單擊RAM控制臺,獲取AccessKey ID。 |
access_key | 當(dāng)前訪問賬號的AccessKey Secret。 |
dlf_access_id | 擁有讀寫DLF權(quán)限的阿里云賬號或RAM賬號的AccessKey ID。 |
dlf_access_key | 擁有讀寫DLF權(quán)限的阿里云賬號或RAM賬號的AccessKey Secret。 |
oss_access_id | 擁有讀寫OSS權(quán)限的阿里云賬號或RAM賬號的AccessKey ID。 |
oss_access_key | 擁有讀寫OSS權(quán)限的阿里云賬號或RAM賬號的AccessKey Secret。 |
rolearn | 角色ARN是角色的全局資源描述符,用來指定具體的角色,格式為 |
Foreign Server配置方式
MaxCompute數(shù)據(jù)源
CREATE USER MAPPING FOR "<user_name>"
SERVER odps_server -- 固定server
OPTIONS
(
access_id '<Access_id>',access_key '<Access_key>'
);
DLF數(shù)據(jù)源
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數(shù)據(jù)源
CREATE USER MAPPING FOR "<user_name>"
SERVER <server_name>
OPTIONS (
access_id '<access_id>',
access_key '<access_key>'
);
參數(shù)說明
參數(shù)名稱 | 功能說明 |
user_name | 待授權(quán)的賬號,比如其他RAM子賬號、Hologres內(nèi)部賬號(BASIC賬號)、public(面向所有用戶公開訪問,請謹(jǐn)慎操作)。 |
server_name | Foriegn Server的名稱,上一步驟自定義設(shè)置的名稱,MaxCompute數(shù)據(jù)源是固定的內(nèi)置server: odps_server。 |
access_id | 當(dāng)前訪問賬號的AccessKey ID,您可以單擊RAM控制臺,獲取AccessKey ID。 |
access_key | 當(dāng)前訪問賬號的AccessKey Secret。 |
dlf_access_id | 擁有讀寫DLF權(quán)限的阿里云賬號或RAM賬號的Accesskey ID。 |
dlf_access_key | 擁有讀寫DLF權(quán)限的阿里云賬號或RAM賬號的Accesskey Secret。 |
oss_access_id | 擁有讀寫OSS權(quán)限的阿里云賬號或RAM賬號的Accesskey ID。 |
oss_access_key | 擁有讀寫OSS權(quán)限的阿里云賬號或RAM賬號的Accesskey Secret。 |
rolearn | 角色ARN是角色的全局資源描述符,用來指定具體的角色,格式為 |
使用示例
EXTERNAL DATABASE(推薦)
以DLF2.0數(shù)據(jù)源為例,首先創(chuàng)建一個(gè)External Database來關(guān)聯(lián)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***********';
創(chuàng)建完成后,該外部Database僅實(shí)例Superuser和DB Owner可訪問,其他賬號無法訪問,接下來通過在RAM控制臺創(chuàng)建RAMRole和Hologres側(cè)CREATE USER MAPPING來給一個(gè)RAM子賬號授權(quán)。
RAM側(cè)新建角色并完成策略配置。
登錄RAM控制臺,單擊角色>創(chuàng)建角色,可信實(shí)體類型選擇阿里云服務(wù),角色類型選擇普通服務(wù)角色,輸入角色名稱,選擇受信服務(wù)為交互式分析,單擊完成。
進(jìn)入權(quán)限策略頁面,單擊創(chuàng)建權(quán)限策略>腳本編輯,分別創(chuàng)建用于Hologres和DLF做權(quán)限檢查的策略,策略內(nèi)容如下。
Hologres需要的權(quán)限檢查策略。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "hologram:GrantAssumeRole", "Resource": "acs:ram::xxx:role/testramrole" } ] }
DLF需要的權(quán)限檢查策略。
{ "Version": "1", "Statement": [ { "Action": "dlf:CheckPermissions", "Resource": "*", "Effect": "Allow" } ] }
進(jìn)入角色頁面,單擊新增授權(quán),添加上述兩個(gè)權(quán)限策略。
Hologres側(cè)通過CREATE USER MAPPING將
ext_db_dlf
數(shù)據(jù)庫的權(quán)限授予RAM子賬號。CREATE USER MAPPING FOR "p4_203535926287167253" EXTERNAL DATABASE ext_db_dlf OPTIONS ( rolearn 'acs:ram::xxx:role/testramrole' );
使用子賬號登錄Hologres控制臺,使用SQL編輯器進(jìn)行查詢。
SELECT * FROM ext_db_dlf.dlf_db.paimon_table;
Foreign Server
以MaxCompute數(shù)據(jù)源為例,給一個(gè)Hologres BASIC賬號授予訪問MC外部表的權(quán)限。
在Hologres中創(chuàng)建BASIC賬號。
CREATE USER basicuser;
給BASIC賬號授予
odps_server
的訪問權(quán)限。CREATE USER MAPPING FOR "basicuser" SERVER odps_server OPTIONS ( access_id 'LTxxxxxxxxxx', access_key 'y8xxxxxxxxxxxxx' );