數據傳輸遷移數據庫前,請確保所有數據源已創建一個數據庫用戶作為遷移用戶或同步用戶。該用戶需要具備源端和目標端數據源對應的權限。
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