配置与 Oracle AI Database 的连接
了解数据库端连接到 Oracle GoldenGate 所需的用户权限以及设置 Oracle AI Database 与 Oracle GoldenGate 连接的配置说明。
为 Oracle 准备数据库用户和权限
了解如何创建数据库用户以及为 Oracle GoldenGate 分配 Oracle 权限。
注:提取和复制都要求数据库处于读/写模式。无法从 Data Guard 备用数据库或为只读活动打开的 Active Data Guard 备用数据库捕获提取,即使启用了 DML 重定向也是如此。
为 Oracle AI Database 26ai 和更高版本授予用户权限
Oracle AI Database 26ai 提供了用户角色,用于向具有 SQL 语句的数据库用户授予基于角色的权限。
Oracle AI Database 26ai 使用基于角色的方法来授予复制所需的权限。这些角色将替换 DBMS_GOLDENGATE_AUTH 软件包中的 GRANT_ADMIN_PRIVILEGE 过程。
例如,要创建 Oracle GoldenGate 管理用户,必须在创建用户时向用户授予相应的 OGG_* 角色。如果仍使用 Oracle AI Database 26ai 中 DBMS_GOLDENGATE_AUTH 程序包中的 GRANT_ADMIN_PRIVILEGE 过程,则不会授予任何权限。相反,系统会发出警告消息,提醒您过程调用已禁用。
以下是 Oracle GoldenGate 26ai 中引入的用户角色:
OGG_CAPTURE
OGG_CAPTURE 具有使用和管理提取进程所需的权限。
要使用 Extract 捕获 DML 和 DDL,用户需要以下权限:
GRANT CONNECT, RESOURCE to ggadmin CONTAINER = all;
GRANT OGG_CAPTURE to ggadmin CONTAINER = all;
如果提取处理已在根容器中注册,则必须执行此附加步骤:
ALTER USER ggadmin SET CONTAINER_DATA = all CONTAINER = current;
OGG_APPLY
具有使用 Oracle GoldenGate Replicat 所需的权限的角色。
要使用复制进程,用户需要此角色以及在目标上执行 DML 和 DDL 的权限。例如,如果 Replicat 进程打算对 HR 方案中的 EMPLOYEES 表执行 DML 操作:
GRANT CONNECT, RESOURCE to ggadmin;
GRANT OGG_APPLY to ggadmin;
GRANT SELECT, INSERT, UPDATE, DELETE on HR.EMPLOYEES TO GGADMIN;
如果 Replicat 用户打算应用 DDL 操作(如 CREATE TABLE、DROP TABLE 和 ALTER TABLE),则应获得执行此类语句所需的系统权限:
GRANT CREATE TABLE, ALTER TABLE, DROP TABLE to ggadmin;
OGG_APPLY_PROCREP
具有执行 Oracle GoldenGate 过程复制支持的程序包所需的权限的角色。它仅包括执行权限,因此,应将此角色与 OGG_APPLY 角色一起使用,以允许用户运行复制进程并在目标处执行过程。
例如,如果复制将应用过程执行。授予过程应如下:
GRANT CONNECT, RESOURCE to ggadmin;
GRANT OGG_APPLY, OGG_APPLY_PROCREP to ggadmin;
为 Oracle Database 21c 和更低版本授予用户权限
从 Oracle GoldenGate 连接到 Oracle AI Database 所需的用户权限取决于用户的类型。
应根据用户需要在源数据库和目标数据库上以 GoldenGate 管理员用户的身份执行的操作授予权限。例如,要向用户授予插入、更新和删除事务处理的 DML 操作权限,请使用 GRANT ANY INSERT/UPDATE/DELETE 权限,并进一步允许用户在 DML 操作中处理表和索引,请使用 GRANT CREATE/DROP/ALTER ANY TABLE/INDEX 权限。
如果 GoldenGate 管理员用户具有 DBA 角色,则不需要其他对象权限。但是,可能会存在将 DBA 角色授予 GoldenGate Administration 用户的安全约束条件。Oracle GoldenGate 不一定需要 DBA 角色。
如果正在复制许多对象,可以考虑对 DML 和 DDL 操作使用 ANY 权限。这简化了为 GoldenGate 管理员用户提供权限的过程,因为您只需根据数据库操作授予一些权限。
下表介绍了 GoldenGate Administrator 用户对 Oracle AI Database 的某些基本特权。出于说明目的,该表使用 c##ggadmin 作为多租户容器数据库的公用用户的示例,使用 ggadmin 作为可插入数据库 (pluggable database,PDB) 用户。PDBEAST 和 PDBWEST 用作 PDB 名称的示例。
下表介绍了 GoldenGate 管理员用户在源数据库和目标 Oracle 数据库上使用 Oracle GoldenGate 的基本权限:
| 权限 | 提取 | 复制所有模式 | 用途 |
|---|---|---|---|
RESOURCE |
是 | 是 | 创建对象所必需的 在 Oracle Database 12cR1 及更高版本(而非 |
CONNECT |
是 | 是 | 公用用户 请参阅授予 Oracle 突变型数据库公用用户的权限示例。 |
CREATE PROCEDURE |
是 | 是 | 需要添加脉动表。 |
CREATE SESSION |
是 | 是 | 连接到数据库所需的权限。 |
CREATE VIEW |
是 | 是 | 添加心跳表视图是必需的。 如果要特定于每个对象,还可以分别为每个对象提供权限。您可以考虑创建特定的数据库角色来维护此类权限。 |
ALTER SYSTEM |
是 | 是 | 执行管理更改,例如启用日志记录。 |
ALTER USER |
是 | 是 | Required for multitenant architecture and GGADMIN should be a valid Oracle GoldenGate administrator schema. |
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('REPUSER', CONTAINER=>'PDBEAST'); |
是 | 是 |
|
向 Extract 和 Replicat 用户授予以 SYS 用户身份连接的 DV_GOLDENGATE_ADMIN 和 DV_GOLDENGATE_REDO_ACCESS 权限。 |
是 | 是 | 从 Data Vault 获取。请参见 Privileges for Capture from Oracle Data Vault 。 |
在 DBMS_MACADM.ADD_AUTH_TO_REALM 中授予复制权限(如果应用于领域)。 |
是 | 是 | 初始加载提取需要获取目标表中的数据,即从 Data Vault 获取数据。请参见 Privileges for Capture from Oracle Data Vault 。 |
目标表上的 INSERT、UPDATE、DELETE |
不适用 | 是 | 将复制的 DML 应用于目标对象。请参阅有关 Oracle DML 中对象和操作支持的详细信息 |
|
|
不适用 | 是 | 将这些特权授予复制用户,而不是向每个表(如果复制每个表)授予 INSERT、UPDATE 和 DELETE。 |
如果执行 DDL 复制,请授予以下作为 Database Vault 所有者的权限: |
否 | 否 | 从 Data Vault 获取。请参见 Privileges for Capture from Oracle Data Vault 。 |
| 对目标对象的 DDL 权限(如果支持 DDL) | 不适用 | 是 | 在目标对象上发出复制的 DDL。请参阅在 Oracle DDL 中支持对象和操作的详细信息。 |
GRANT [CREATE\|ALTER\|DROP] ANY [TABLE\|INDEX\|VIEW\|PROCEDURE] to GGADMIN; |
是 | 是 | 授予对表的 DDL 复制的权限。 |
CREATE ANY TABLE |
是 | 是 | 授予在任何方案中创建表的权限。要仅允许在特定方案中创建表,请使用 CREATE TABLE 权限。 |
CREATE ANY VIEW |
是 | 是 | 授予在任何数据库方案中创建视图的权限。要允许在特定方案中创建视图,请使用 CREATE VIEW 权限。 |
|
|
是 | 是 | 允许所有权限对字典表正常工作。 |
示例:为 Oracle AI Database 公用用户授予的权限
为 Oracle AI Database 公用用户授予的权限,在以下示例中为 c##ggadmin:
ALTER USER c##ggadmin IDENTIFIED BY ggadmin CONTAINER=all;
ALTER USER c##ggadmin SET CONTAINER_DATA=all CONTAINER=current;
ALTER USER c##ggadmin QUOTA unlimited ON GG_DATA;
TABLESPACE GG_DATA TEMPORARY TABLESPACE temp;
GRANT RESOURCE to c##ggadmin;
GRANT CREATE SESSION to c##ggadmin;
GRANT CREATE VIEW to c##ggadmin;
GRANT CREATE TABLE to c##ggadmin;
GRANT CONNECT to c##ggadmin CONTAINER=all;
GRANT DV_GOLDENGATE_ADMIN; --- for data vault user
GRANT DV_GOLDENGATE_REDO_ACCESS; --- for data vault user
GRANT ALTER SYSTEM to c##ggadmin;
GRANT ALTER USER to c##ggadmin;
GRANT SELECT ANY DICTIONARY to c##ggadmin;
GRANT SELECT ANY TRANSACTION to c##ggadmin;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggadmin');
在此示例中,未提供 DBA 权限。如果缺少权限,DBA 必须另外授予必要的权限。
以下示例中提供了为 PDB 用户 ggadmin 授予的权限:
ALTER SESSION SET CONTAINER=dbwest;
ALTER USER c#ggadmin IDENTIFIED BY ggadmin CONTAINER=all;
GRANT CONNECT, RESOURCE, DBA TO c##ggadmin CONTAINER=CURRENT;
GRANT ALTER SESSION TO c##ggadmin CONTAINER=all;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggadmin');
注:并非每个用户都必须授予 DBA 角色。应根据用户需要对数据库执行的操作授予权限。例如,要向 ggadmin 授予插入、更新和删除事务处理的 DML 操作权限,请使用 GRANT ANY INSERT/UPDATE/DELETE 权限。要进一步允许用户在 DML 操作过程中使用表和索引,请使用 GRANT CREATE/DROP/ALTER ANY TABLE/INDEX 权限。
示例:使用 DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE 程序包授予权限
此过程授予用户成为 Oracle GoldenGate 管理员所需的权限以下示例授予 Oracle 多租户数据库上 Extract 的显式权限:
BEGIN
DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE
(GRANTEE => 'c##ggadmin'
,PRIVILEGE_TYPE => 'CAPTURE'
,GRANT_SELECT_PRIVILEGES => TRUE
,DO_GRANTS => TRUE
,CONTAINER => 'ALL');
END;
有关详细信息,请参阅《 Oracle AI Database PL/SQL Packages and Types Reference 》中的 DBMS_GOLDENGATE_AUTH。
从 Oracle Data Vault 获取权限
授予在 Oracle AI Database 中以 SYS 用户身份连接的以下权限。为提取和复制用户身份证明设置以下权限:
-
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('*userID*','*',
GRANT_OPTIONAL_PRIVILEGES=>'*');
GRANT DV_GOLDENGATE_ADMIN, DV_GOLDENGATE_REDO_ACCESS to *userID*;
-
如果应用于领域,请在
DBMS_MACADM.ADD_AUTH_TO_REALM中授予复制权限。以 Database Vault 所有者身份连接并执行以下脚本:
BEGIN DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALM( REALM_NAME => 'Oracle Default Component Protection Realm',GRANTEE => '*userID*',AUTH_OPTIONS => 1) ; END ; / EXECUTE_DBMS_MACADM.AUTHORIZE_DDL('SYS', 'SYSTEM'); -
对于 DDL 复制,请授予以下作为 Database Vault 所有者的权限:
EXECUTE DBMS_MACADM.AUTHORIZE_DDL ('*userID*', '*SCHEMA FOR DDL*');