使用数据库密码插件验证数据库连接
Oracle GoldenGate 23.5 及更高版本包含一个用户友好的插件,允许编写定制代码从第三方 Vault 检索数据库身份证明,然后将其以预定义的 API 返回到 Oracle GoldenGate。
由于组织将增加的安全规则作为最佳实践,一些组织不允许在 Oracle GoldenGate 的本地 wallet(身份证明存储)中存储数据库身份证明(例如密码)。密码需要存储在 Oracle GoldenGate 外部的 Vault 中。为了实施此验证方法,已引入数据库密码插件。它允许 Oracle GoldenGate 在需要连接到数据库实例时从所选的任何第三方 Vault 或 OCI Vault 检索密码。
了解在 Oracle GoldenGate 中启用数据库密码插件的工作流,并在从 Oracle GoldenGate 建立数据库连接时使用该工作流检索密钥密码。
使用以下任一选项为 Oracle GoldenGate 设置数据库密码插件服务:
数据库密码插件需要 API
此插件中至少需要存在两个函数 API。这些 API 描述如下:
getManifest()
每个插件必须公开 getmanifest 函数,该函数返回描述插件的 JSON 样式字符串,如下所示:
{"$schema": "ogg:plugin", "version": "23.4" }
版本号可以等于或小于 Oracle GoldenGate 版本号。例如,如果您运行的是 Oracle GoldenGate 版本 23.6,则 JSON 字符串中的版本号可以是 23.4、23.5 或 23.6。
getUseridAliasPassword(oggDomain *C.char, oggAlias *C.char, oggUserid *C.char, oggPassword *C.char)
Oracle GoldenGate 会调用此函数来检索 USERIDALIAS 的口令。
返回整数值。0 表示成功,任何非零值都是失败。
oggDomain、oggAlias 和 oggUserid 是用于标识数据库用户身份证明的输入参数。oggPassword 是用于返回从 Vault 提取的口令的输出参数。
配置数据库密码插件以从第三方 Vault 存储和访问数据库密码
要从所选的第三方 Vault 创建、存储和检索密钥密码,您需要编写自己的定制代码。代码需要生成共享用户库,该库将用于从 Oracle GoldenGate Service Manager 激活插件即服务。激活插件后,您可以在从 Oracle GoldenGate 建立数据库连接时访问第三方 Vault 以检索存储的密钥密码。Oracle GoldenGate 将 USERID 作为别名存储在 domain_name.alias_name 下的身份证明存储中。domain_name 和 alias_name 用作调用插件的输入参数。例如,如果域名是 OracleGoldenGate 且别名是 ggeastadmin ,则密钥名称将为 OracleGoldenGate.ggeastadmin 。插件标识用于从 Vault 检索密钥(密码)的密钥名称。
可以用任何语言编写定制代码,只要该代码可以编译为共享用户库。最常用的语言包括 GoLang、C/C++ 和 Python。
下图显示了将数据库密码插件与 Oracle GoldenGate 结合使用以设置来自第三方 Vault 的数据库连接时的工作流。USERIDALIAS 存储在 Oracle GoldenGate 身份证明存储中,密钥密码存储在第三方 Vault 中。

使用以下步骤配置数据库密码插件,以便在第三方 Vault 中存储数据库密码并检索数据库密码以验证来自 Oracle GoldenGate 的数据库连接:
-
找到
GG Service Manager Home/var/lib/plugins/目录中存在的数据库密码插件。缺省情况下,此目录下没有库。注:虽然对库文件名没有限制,但插件将仅选取此位置中存在的第一个库文件。
-
检查与插件一起使用的函数 API。有关详细信息,请参见 API Required for Database Password Plugin 。
-
编写和编译代码以创建将用于激活数据库密码插件的共享用户库。您需要根据用于设置数据库密码插件的第三方 Vault 编写和编译代码。
-
将编译的用户库复制到
Service_Manager_Home/var/lib/plugins/目录。 -
运行 REST API 命令以在 Service Manager 下激活插件作为新服务。假设 Service Manager 在本地端口 9011 上运行,则该命令将如下所示:
shell>OGG_ADMIN_PASSWORD="xxxx" shell>curl -svu "oggadmin:${OGG_ADMIN_PASSWORD}" http://127.0.0.1:9011/services/v2/deployments/ServiceManager/services/pluginsrvr \ -XPOST --data '{"$schema":"ogg:service", "config":"external", "enabled":true, "critical":true, "status":"running"}'在激活插件后,您可以从服务管理器查看插件的状态,如下图中所示。您可以在服务下将服务视为插件服务。

注:如果使用的是 NGINX 或安全部署,则需要在命令行中使用 https 而不是 http ,以及相应的 CA 证书路径。
-
如果需要,为第三方 Vault 设置任何环境变量,然后重新启动服务管理器。
-
配置第三方 Vault 并将密码存储在其中。
-
运行管理客户机并使用
PLUGIN选项或以前使用的NOPASSWORD选项设置数据库登录身份证明,并测试与数据库的连接是否成功。以下示例说明了此配置:a. 连接到部署:
OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadminb. 添加凭证:
-
使用
Plugin选项:OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 PLUGIN ALIAS ggeastadmin输出:
2026-04-02T18:34:14Z INFO OGG-15114 Credential store altered. Credential Type: Plugin -
使用
PLUGIN SECRET选项:OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 PLUGIN SECRET abc ALIAS ggeastadmin输出:
2026-04-02T18:34:14Z INFO OGG-15114 Credential store altered. Credential Type: Plugin Secret -
使用传统
NOPASSWORD选项,使用以下命令:ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 NOPASSWORD ALIAS u1alias;
c. 使用身份证明别名登录数据库:
OGG (http://127.0.0.1:9011 Deployment) 3> DBLOGIN USERIDALIAS ggadmin -
配置数据库密码插件以从 OCI Vault 存储和访问数据库密码
要从 OCI Vault 创建、存储和检索密钥密码,您可以使用示例代码,其中显示了如何从 OCI Vault 检索密钥密码。Oracle GoldenGate 将 USERID 作为别名存储在 domain_name.alias_name 下的身份证明存储中。密码将作为密钥存储在 OCI Vault 中,密钥名称为 domain_name.alias_name。例如,如果域名是 OracleGoldenGate 且别名是 ggeastadmin,则密钥名称将为 OracleGoldenGate.ggeastadmin。插件标识用于从 Vault 检索密钥(密码)的密钥名称。
下图中的步骤演示了使用 OCI Vault 设置数据库密码插件的工作流:

-
在 OCI Vault 中创建密码。
-
验证是否已在 OCI Vault 中创建密钥,该 Vault 包含此数据库用户 `ggeastadmin` 的密码。确保密钥名称与预期的命名约定相匹配,例如 `domain_name.alias_name` 格式的 `OracleGoldenGate.ggeastadmin`。
-
找到
GG Service Manager Home/var/lib/plugins/目录中存在的数据库密码插件。缺省情况下,此目录下没有库。注:虽然库文件名没有限制,但插件将仅选取此位置中存在的第一个库文件。
-
检查需要与插件一起使用的函数 API。有关详细信息,请参见 API Required for Database Password Plugin 。
-
访问
OGG_HOME/src/PluginExamples/OCIVault/OCIVault.go中的样例代码以生成共享用户库。 -
通过从
OGG_HOME/src/PluginExamples/OCIVault/OCIVault.go运行make命令编译代码。这将生成名为libOCIVault.so的用户库。 -
将用户库
libOCIVault.so复制到Service_Manager_Home/var/lib/plugins/目录。 -
发出 REST API 命令以在 Service Manager 下将此插件作为新服务激活。假设 Service Manager 在本地端口 9011 上运行,则该命令将如下所示:
shell>OGG_ADMIN_PASSWORD="xxxx" shell>curl -svu "oggadmin:${OGG_ADMIN_PASSWORD}" http://127.0.0.1:9011/services/v2/deployments/ServiceManager/services/pluginsrvr \ -XPOST --data '{"$schema":"ogg:service", "config":"external", "enabled":true, "critical":true, "status":"running"}'在激活插件后,您可以从服务管理器查看插件的状态,如下图中所示。您可以在服务下将服务视为插件服务。

注:如果使用的是 NGINX 或安全部署,则需要在命令行中使用
https而不是http,以及相应的 CA 证书路径。 -
在 Service Manager Web 界面中,将
OCI_AUTH和OCID_VAULT_OCID环境变量设置为以下值:-
OCI_AUTH = instance_principal :在此示例中已使用
instance_principal验证方法。但是,数据库密码插件支持 OCI Vault 的以下验证方法,包括:-
instance_pricinpal:实例主用户验证。 -
DEFAULT:OCI 配置文件中的默认配置文件。 -
定制名称:OCI 配置文件中的定制概要文件。
-
OCID_VAULT_OCID = ocid1.vault.oc1-us-sanjose-1.exxxxxxxxxxxxxxxxxx42upinp4mfxwta:此值派生自步骤 2 。这两个环境变量必须在服务管理器配置下的环境变量部分中正确设置。

注:如果使用的是 NGINX 或安全部署,则需要在命令行中使用
https而不是http,以及相应的 CA 证书路径。
-
-
-
重新启动服务管理器以激活设置。
-
标识运行 Oracle GoldenGate Service Manager 的 VM 实例。
-
将 VM 实例添加到动态组,以使
instance_principal验证工作。 -
为 VM 实例分配标记,例如 EASTVaultTest 。这样可以更轻松地创建动态组。有关详细信息,请参阅管理动态组。动态组需要一个策略来使用该 Vault 中的密钥。
-
创建一个策略以允许此动态组使用密钥资源(秘密密码)。有关创建策略以控制对 Vault 服务的访问的详细信息,请参见 Vault 服务的详细信息。

-
运行管理客户机以使用
NOPASSWORD选项创建数据库登录别名,并测试连接是否成功,如以下示例中所示:OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadmin Using default deployment 'Deployment'OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 ALIAS ggeastadmin NOPASSWORD 2024-04-02T18:34:14Z INFO OGG-15114 Credential store altered.OGG (http://127.0.0.1:9011 Deployment) 3> DBLOGIN USERIDALIAS ggadmin Successfully logged into database.
配置数据库密码插件以从 Oracle Key Vault 存储和访问数据库密码
Oracle GoldenGate 23.5 及更高版本包含一个插件服务,允许您编写定制代码以从第三方 Vault 检索数据库身份证明,然后将预定义 API 中的身份证明返回到 Oracle GoldenGate,如 Configure the Database Password Plugin to Store and Access the Database Password from a Third-Party Vault 中所述。此功能包括可在 Oracle GoldenGate 中配置的 libokvoggdbpwd.so 库,以管理来自 Oracle Key Vault 的密码。
下图显示了 Oracle GoldenGate 与 Oracle Key Vault 之间用于配置插件服务,然后使用 OKV 插件库从 Oracle Key Vault 服务器请求和检索数据库密码的工作流。

从 Oracle Key Vault 存储和检索数据库密码的过程可概述如下:
-
Oracle GoldenGate 管理员使用 RESTful 服务实用程序将 Oracle GoldenGate 密码上载到 Oracle Key Vault。
-
Oracle GoldenGate 使用
libokvoggdbpwd.so插件库从 Oracle Key Vault 服务器请求数据库身份证明。成功验证后端后,将从 OKV 服务器中提取此密码。 -
检索密码后,Oracle GoldenGate 进程将能够使用远程存储的密码连接到数据库。
有关为 Oracle GoldenGate 数据库密码存储和检索实施此功能的详细信息,请参阅 Oracle Key Vault Administrator’s Guide 中的 Centralizing the Management of Oracle GoldenGate Passwords 。