数据传输迁移数据库前,请确保所有数据源已创建一个数据库用户作为迁移用户或同步用户。该用户需要具备源端和目标端数据源对应的权限。
OceanBase 数据库 MySQL 租户作为源端的权限说明
OceanBase 数据库 MySQL 租户作为源端时,迁移/同步用户需要如下权限:
目标端为 Kafka、DataHub 和 RocketMQ 等消息队列类型时,需要对源端待同步数据库具备
SELECT
权限。目标端为 MySQL 数据库、OceanBase 数据库 MySQL 租户等数据库类型时,需要对源端待迁移数据库及
oceanbase
数据库具备SELECT
权限。重要仅 OceanBase 数据库 V4.0.0 及之后版本需要添加
oceanbase
数据库的SELECT
权限。对于 VPC 内 OceanBase 数据库,如果是增量数据同步的场景,您需要在 OceanBase 数据库的
sys
租户下创建一个用户,并赋予其SELECT ON *.*
权限。
OceanBase 数据库 MySQL 租户作为目标端的权限说明
OceanBase 数据库 MySQL 租户作为目标端时,迁移用户需要以下权限:
对目标端数据库具备
CREATE
、CREATE VIEW
、SELECT
、INSERT
、UPDATE
、ALTER
、INDEX
和DELETE
权限。GRANT CREATE,CREATE VIEW,SELECT,INSERT,UPDATE,ALTER,INDEX,DELETE ON <database_name>.* TO '<user_name>';
对整个租户具备
SELECT
权限。GRANT SELECT ON *.* TO '<user_name>';
OceanBase 数据库 Oracle 租户作为源端的权限说明
OceanBase 数据库 Oracle 租户作为源端时,迁移/同步用户需要以下权限:
对于 OceanBase 数据库 V2.2.70 之前的版本,源端用户需要的权限为
GRANT SELECT ON *.* TO <user_name>;
。对于 OceanBase 数据库 V2.2.70 及之后的版本,源端用户需要的权限为
GRANT DBA TO <user_name>;
。
OceanBase 数据库 Oracle 租户作为目标端的用户权限赋予说明
迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户时,目标端的版本不同,权限使用也不同。
目标端版本 | 权限说明 |
V2.2.5 或 V2.2.3 | 您可以通过以下两种方式赋予迁移用户权限:
|
V2.2.7 及之后版本 | 您可以通过以下两种方式赋予迁移用户权限:
|
Oracle 数据库作为源端的权限说明
创建用户后,不同版本的 Oracle 数据库及用户角色所需要赋予的权限说明如下。
对于 ADG 备库,有时可能出现授权后权限未生效的问题。此时,您需要在备库执行命令
ALTER SYSTEM FLUSH SHARED_POOL;
来刷新 Shared Pool。本文提供的是非最小化权限说明,需要赋予迁移用户
SELECT ANY TRANSACTION
、SELECT ANY TABLE
和SELECT ANY DICTIONARY
权限。以 Oracle 数据库作为源端时,您可以对 ANY 进行细化,赋予迁移用户最小化权限以提高安全性。详情请参见 源端 Oracle 数据库的最小化权限。
12C 之前版本 DBA 用户权限赋予说明
如果用户的环境允许为迁移用户赋予数据库管理员(DBA)角色,且 Oracle 数据库的版本为 12C 之前的版本,则只需要执行下述语句,为迁移用户赋予 DBA 权限即可。
GRANT DBA TO <user_name>;
12C 之前版本非 DBA 用户权限赋予说明
如果用户环境对迁移用户的授权较为谨慎,且 Oracle 数据库的版本为 12C 之前的版本,操作如下:
授予 CONNECT 权限。
GRANT CONNECT TO <user_name>;
赋予迁移用户
CREATE SESSION
、ALTER SESSION
、SELECT ANY TRANSACTION
、SELECT ANY TABLE
和SELECT ANY DICTIONARY
权限。GRANT CREATE SESSION, ALTER SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <user_name>;
赋予迁移用户
LOGMINER
相关权限。GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <user_name>;
赋予迁移用户
CREATE TABLE
和UNLIMITED TABLESPACE
权限。GRANT CREATE TABLE, UNLIMITED TABLESPACE TO <user_name>;
如果迁移的 Schema 名称和
user_name
一致,执行下述语句。GRANT CREATE SEQUENCE,CREATE VIEW TO <user_name>;
如果迁移的 Schema 名称和
user_name
不一致,执行下述语句。GRANT CREATE ANY TABLE,CREATE ANY INDEX,DROP ANY TABLE,ALTER ANY TABLE,COMMENT ANY TABLE, DROP ANY INDEX,ALTER ANY INDEX,CREATE ANY SEQUENCE,ALTER ANY SEQUENCE,DROP ANY SEQUENCE, CREATE ANY VIEW,DROP ANY VIEW,INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE TO <user_name>;
您也可以执行下述语句。
GRANT CREATE ANY TABLE,CREATE ANY INDEX,DROP ANY TABLE,ALTER ANY TABLE,COMMENT ANY TABLE, DROP ANY INDEX,ALTER ANY INDEX,CREATE ANY SEQUENCE,ALTER ANY SEQUENCE,DROP ANY SEQUENCE, CREATE ANY VIEW,DROP ANY VIEW TO <user_name>; # 加上需要迁移至 Oracle 数据库指定的表 GRANT DELETE, INSERT, UPDATE ON <库名>.<表名> TO <user_name>;
12C 及之后版本 DBA 用户权限赋予说明
如果用户的环境允许为迁移用户赋予数据库管理员(DBA)角色,且 Oracle 数据库的版本为 12C 及之后的版本,则需要区分是否使用 12C/18C/19C 的可插拔数据库 Pluggable DataBase(PDB)。
非 PDB
执行下述授权语句,为迁移用户赋予 DBA 权限。
GRANT DBA TO <user_name>;
执行下述语句,赋予迁移用户对
SYS.USER$
表的读权限。GRANT SELECT ON SYS.USER$ TO <user_name>;
PDB
如果 Oracle 数据库迁移至 OceanBase Oracle 数据库的源端为 12C/18C/19C 的可插拔数据库 Pluggable DataBase(PDB)时,拉取 PDB 的账号需要是 Common 用户。
执行下述语句,切换至 CDB$ROOT。
ALTER SESSION SET CONTAINER=CDB$ROOT;
每个 Common 用户都可以连接到 Root 容器(被命名为
CDB$ROOT
)、任何有连接权限的 PDB,并执行相关操作。执行下述语句,赋予迁移用户 DBA 权限。
GRANT DBA TO C##XXX CONTAINER=ALL;
执行下述语句,赋予迁移用户对
SYS.USER$
表的读权限。GRANT SELECT ON SYS.USER$ TO C##XXX CONTAINER=ALL;
12C 及之后版本非 DBA 用户权限赋予说明
如果用户环境对迁移用户的授权较为谨慎,且 Oracle 数据库的版本为 12C 及之后的版本,操作如下:
非 PDB
授予 CONNECT 权限。
GRANT CONNECT TO <user_name>;
执行下述语句,赋予迁移用户对
SYS.USER$
表的读权限。GRANT SELECT ON SYS.USER$ TO <user_name>;
赋予迁移用户
CREATE SESSION
、ALTER SESSION
、SELECT ANY TRANSACTION
、SELECT ANY TABLE
和SELECT ANY DICTIONARY
权限。GRANT CREATE SESSION, ALTER SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <user_name>;
赋予迁移用户
LOGMINER
相关权限。GRANT LOGMINING TO <user_name>; GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <user_name>;
赋予迁移用户
CREATE TABLE
和UNLIMITED TABLESPACE
权限。GRANT CREATE TABLE, UNLIMITED TABLESPACE TO <user_name>;
如果迁移的 Schema 名称和
user_name
一致,执行下述语句。GRANT CREATE SEQUENCE,CREATE VIEW TO <user_name>;
如果迁移的 Schema 名称与
user_name
不一致,执行下述语句。GRANT CREATE ANY TABLE,CREATE ANY INDEX,DROP ANY TABLE,ALTER ANY TABLE,COMMENT ANY TABLE, DROP ANY INDEX,ALTER ANY INDEX,CREATE ANY SEQUENCE,ALTER ANY SEQUENCE,DROP ANY SEQUENCE, CREATE ANY VIEW,DROP ANY VIEW,INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE TO <user_name>;
PDB
如果 Oracle 数据库迁移至 OceanBase Oracle 数据库的源端为 12C/18C/19C 的可插拔数据库 Pluggable DataBase(PDB)时,拉取 PDB 的账号需要是 Common 用户。
授予 CONNECT 权限。
GRANT CONNECT TO <C##XXX> CONTAINER=ALL;
执行下述语句,赋予迁移用户对
SYS.USER$
表的读权限。GRANT SELECT ON SYS.USER$ TO <C##XXX> CONTAINER=ALL;
赋予迁移用户
CREATE SESSION
、ALTER SESSION
、SELECT ANY TRANSACTION
、SELECT ANY TABLE
和SELECT ANY DICTIONARY
权限。GRANT CREATE SESSION, ALTER SESSION, SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <C##XXX> CONTAINER=ALL;
赋予迁移用户
LOGMINER
相关权限。GRANT LOGMINING TO <C##XXX> CONTAINER=ALL; GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <C##XXX> CONTAINER=ALL;
赋予迁移用户
CREATE TABLE
和UNLIMITED TABLESPACE
权限。GRANT CREATE TABLE, UNLIMITED TABLESPACE TO <C##XXX> CONTAINER=ALL;
如果迁移的 Schema 名称和
C##XXX
一致,执行下述语句。GRANT CREATE SEQUENCE,CREATE VIEW TO <C##XXX> CONTAINER=ALL;
如果迁移的 Schema 名称和
C##XXX
不一致,执行下述语句。GRANT CREATE ANY TABLE,CREATE ANY INDEX,DROP ANY TABLE,ALTER ANY TABLE,COMMENT ANY TABLE, DROP ANY INDEX,ALTER ANY INDEX,CREATE ANY SEQUENCE,ALTER ANY SEQUENCE,DROP ANY SEQUENCE, CREATE ANY VIEW,DROP ANY VIEW,INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE TO <C##XXX> CONTAINER=ALL;
MySQL 数据库作为源端的权限说明
数据库用户需要对待迁移的数据库具备读权限。如果是 MySQL 数据库 V8.0,请额外赋予
SHOW VIEW
权限。GRANT SELECT ON <database_name>.* TO '<user_name>';
MySQL 数据库增量同步时,数据库用户需要具备
REPLICATION CLIENT
、REPLICATION SLAVE
和SELECT *.*
权限。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>' [WITH GRANT OPTION]; GRANT SELECT ON *.* TO '<user_name>';
说明增量同步时,如果缺少源端所有表的读权限,可能导致项目异常中断。
WITH GRANT OPTION
为可选参数。
TiDB 数据库作为源端的权限说明
数据库用户需要对待迁移的数据库具备读权限。
GRANT SELECT ON <database_name>.* TO '<user_name>';
TiDB 数据库增量同步时,数据库用户需要具备
REPLICATION CLIENT
、REPLICATION SLAVE
和SELECT *.*
权限。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>' [WITH GRANT OPTION]; GRANT SELECT ON *.* TO '<user_name>';
ADB 数据库作为目标端的权限说明
AnalyticDB for MySQL(简称 ADB)支持针对不同的权限粒度授予不同的权限,以达到权限控制的目的。详情请参见 权限模型。
ADB 支持以下四个粒度的权限控制:
GLOBAL:集群级别
DB:数据库级别
TABLE:表级别
COLUMN:列(字段)级别
Kafka 作为目标端的权限说明
如果 Kafka 存在鉴权,请参见 新建 Kafka 数据源。
Kafka 用户需要具备进行以下操作的权限:
创建和查看 Topic
查看 Topic Partition 信息
写入 Record
读取 Record
DataHub 作为目标端的权限说明
DataHub 根据 endpoint/ak/sk 进行鉴权。
DataHub 用户需要具备 GetProject
、CreateTopic
、ListTopic
、GetTopic
、ListShard
、PutRecords
、GetRecords
和 GetCursor
权限。
RocketMQ 作为目标端的权限说明
RocketMQ 作为目标端时,同步用户需要具备进行以下操作的权限:
创建和查看 Topic
查看 Topic MessageQueue 信息
写入 Record
读取 Record