将 Oracle 用作源终端节点时,AWS DMS 需要什么权限?
上次更新日期:2021 年 2 月 9 日
我有一个将 Oracle 用作源终端节点的 AWS Database Migration Service (AWS DMS) 任务。什么是 AWS DMS 所需的最低权限?
简短描述
AWS DMS 需要对源数据库数据的读取权限,以便可以将数据迁移到目标中。所需的权限根据您的 AWS DMS 任务设置和您在执行的迁移的类型而不同。查看以下数据库所需的最低权限:
- AWS 托管的 Oracle 源数据库;即 Amazon Relational Database Service (Amazon RDS)。
- 自主管理的 Oracle 源数据库
- 正在进行复制任务的 Oracle 源数据库
解决方法
AWS 托管的 Oracle 源数据库;即 Amazon RDS
对于 Amazon 管理的 Oracle 数据库,例如运行 Oracle 的 Amazon RDS 数据库实例,请参阅将 Amazon 托管的 Oracle 数据库用作 AWS DMS 的源。
自主管理的 Oracle 源数据库
对于自主管理的 Oracle 数据库,需要以下权限:
GRANT SELECT on V_$DATABASE to <dms_user>;
GRANT SELECT on V_$THREAD to <dms_user>;
GRANT SELECT on V_$PARAMETER to <dms_user>;
GRANT SELECT on V_$NLS_PARAMETERS to <dms_user>;
GRANT SELECT on V_$TIMEZONE_NAMES to <dms_user>;
GRANT SELECT on ALL_INDEXES to <dms_user>;
GRANT SELECT on ALL_OBJECTS to <dms_user>;
GRANT SELECT on ALL_TABLES to <dms_user>;
GRANT SELECT on ALL_USERS to <dms_user>;
GRANT SELECT on ALL_CATALOG to <dms_user>;
GRANT SELECT on ALL_CONSTRAINTS to <dms_user>;
GRANT SELECT on ALL_CONS_COLUMNS to <dms_user>;
GRANT SELECT on ALL_TAB_COLS to <dms_user>;
GRANT SELECT on ALL_IND_COLUMNS to <dms_user>;
GRANT SELECT on ALL_LOG_GROUPS to <dms_user>;
GRANT SELECT on SYS.DBA_REGISTRY to <dms_user>;
GRANT SELECT on SYS.OBJ$ to <dms_user>;
GRANT SELECT on DBA_TABLESPACES to <dms_user>;
GRANT SELECT on ALL_TAB_PARTITIONS to <dms_user>;
GRANT SELECT on ALL_ENCRYPTED_COLUMNS to <dms_user>;
GRANT SELECT ANY TRANSACTION to <dms_user>;
GRANT SELECT on V_$LOGMNR_LOGS to <dms_user>;
GRANT SELECT on V_$LOGMNR_CONTENTS to <dms_user>;
GRANT SELECT on V_$LOG to <dms_user>;
GRANT SELECT on V_$ARCHIVED_LOG to <dms_user>;
GRANT SELECT on V_$LOGFILE to <dms_user>;
GRANT SELECT on V_$TRANSACTION to <dms_user>;
要公开视图,需要以下权限:
GRANT SELECT on ALL_VIEWS to <dms_user>;
注意:要公开视图,您还必须将以下额外连接属性添加到源终端节点:exposeViews=true。
要使用与您的复制任务中的表名称匹配的模式或允许源数据库用户从另一个架构中读取表,需要以下权限:
GRANT SELECT ANY TABLE to <dms_user>;
要在您的复制任务中指定表列表,需要以下权限:
GRANT SELECT on <schema>.<table > ;
注意:为表列表中的所有表添加这些权限。要从 Oracle RAC 中迁移,您必须授予带有前缀 gv_$ 和 v_$ 的实体化视图 SELECT 权限。
要对大型对象 (LOB) 启用 AWS DMS 验证,需要以下权限:
GRANT execute on sys.dbms_crypto to <dms_user>;
如果您使用 addSupplementalLogging 额外连接属性,则需要以下权限:
GRANT ALTER ANY TABLE to <dms_user>
正在进行复制任务的 Oracle 源数据库
Oracle 在进行复制期间提供两种读取重做日志的方法:Oracle LogMiner 和 Oracle Binary Reader。根据您使用的是 LogMiner 还是 Binary Reader,您必须在授予先前提及的所需权限后授予源用户额外权限。
要使用 LogMiner,需要以下权限:
GRANT EXECUTE ON dbms_logmnr TO <dms_user>;
以下权限仅对于 Oracle 12c 需要:
GRANT LOGMINING TO <dms_user>;
要使用 Binary Reader,需要以下权限:
GRANT SELECT ON v_$transportable_platform to <dms_user>;
由于 Binary Reader 通过使用 Oracle 目录读取重做和存储日志,您必须授予 AWS DMS 在源数据库上创建 Oracle 目录的访问权:
GRANT CREATE ANY DIRECTORY to <dms_user>;
或者,如果您不想允许 AWS DMS 在 Oracle 源数据库上创建 Oracle 目录,您可以在重做和存档日志路径中预先创建 Oracle 目录。然后,授予这些目录上的 AWS DMS 用户 READ 访问权:
GRANT READ ON DIRECTORY <RedoLog_directory_name> to <dms_user>;
GRANT READ ON DIRECTORY <ArchiveLog_directory_name> to <dms_user>;
最后,确认目录是通过查询 ALL_DIRECTORIES 表创建的。
如果源数据库使用 Oracle ASM,则需要以下权限:
GRANT SYSASM to <ASM_user>;
注意:由于从 Oracle ASM 中读取重做和存档日志使用 Oracle DBMS_DISKGROUP 包中的功能,而这需要 SYSASM 或 SYSDBA 权限,因此,需要这些权限。
如果您使用 copyToTempFolder 额外连接属性,您必须创建目录并授予以下权限:
Create directory <bfile_dir> as <copyToTempFolder_PATH>;
GRANT READ, WRITE ON DIRECTORY <bfile_dir> TO <dms_user>;
对于 AWS DMS 3.1 版本或更高版本,最佳实践是添加 parallelASMReadThreads 额外连接属性。有关更多信息,请参阅将 Oracle LogMiner 或 Oracle Binary Reader 用于更改数据捕获 (CDC)。
注意:AWS DMS 支持将 Oracle Active Data Guard 备用数据库用作源。在 Active Data Guard 模式中,备用数据库可以在只读模式下打开,因此,您必须对主实例授予先前提及的权限。对主实例授予权限后,执行几次日志切换,以便可以将权限复制到备用数据库中。有关更多信息,请参阅适用于强制进行日志切换的 Oracle 文档。