当用户需要把数据库部署到云上时,用户首先需要通过Portal界面创建数据库服务。创建成功后,用户则可以下载对应的客户端来进行数据管理操作。为了提升数据库使用过程中的便捷性和安全性,云服务一般会提供IAM服务(Identity and Access Management)认证机制。
openGauss搬迁上云后所提供的服务称为华为数据仓库服务(Data Warehouse Service,DWS)服务。当我们与IAM进行对接时,需要对应的服务和数据库的C/S两端协作完成。完整的IAM认证对接组件如图11-10所示。

图11-10 IAM认证对接组件流程图
在上述流程图中,我们要求云数据库服务管控侧和openGauss内核侧分别具备如表11-2的功能:
表11-2 云数据库服务管控侧和openGauss内核侧功能表
| 序号 | 云数据库服务管控侧 | openGauss内核侧 |
| 1 | 与IAM对接,支持配置具有登录数据库权限的IAM角色信息 | 支持创建支持IAM认证的数据库用户,该用户没有密码,只支持IAM连接认证使用 |
| 2 | 支持获取凭证API接口,以ak/sk信息为入参获取token,且返回token前需要校验token中IAM用户名信息 | 服务端新增认证类型,通过用户属性判断使用IAM认证,而非账户口令认证 |
| 3 | 获取凭证API接口需支持用户自动创建及群组添加用户功能 | 客户端JDBC支持使用凭证API接口获取IAM临时凭据信息,并作为密码参数,传递给服务器 |
| 4 | 在DB开始认证前,将集群标识码、解析token用的证书传递到数据库服务器上 | 数据库服务侧支持获取region证书对token进行解签名 |
| 5 | 将集群标识码信息与token信息进行封装,返回给DB client使用 | 数据库服务根据token(含集群标识码)、policy等信息check解签名后的token是否符合数据库连接请求的要求,进行最终认证 |
事实上,openGauss支持两种方式来创建用于IAM认证的用户。第一种方式是手动创建,起使用语法如下,我们无需指定该用户的密码。
CREATE USER 'db_iam_user' PASSWORD DISABLE;
第二种方式为自动创建,由DWS管控侧提供凭证来指定自动创建参数(参数为AutoCreate),如果指定的数据库用户不存在则会自动创建,需openGauss内核侧适配,工具支持以下参数:
集群标识符:包含数据库的集群名称。
数据库用户名:现有或新的数据库用户名称。如果数据库中不存在此用户且AutoCreate为true,则将创建支持IAM认证的数据库新用户。如果此用户不存在且AutoCreate为false,则请求会失败。
AutoCreate (可选):如果数据库用户名不存在,则创建新用户。
获取凭证API接口将通过DWS Service和管控侧工具将AutoCreate、数据库用户名信息传递到管控域,GuestAgent需要内部连接数据库查询DWS Service传递的数据库用户名是否存在,如果存在则直接退出。如果不存在则判断AutoCreate是否为true,如果AutoCreate为ture,则拼接如下SQL语句发给数据库创建用于IAM认证的用户:
CREATE ROLE user_name PASSWORD DISABLE;




