---
title: "用户权限说明 | OceanBase 文档中心"
description: 用户权限说明 OceanBase 迁移服务（OceanBase Migration Service，OMS）迁移数据库前，请确保所有数据源已创建一个数据库用户作为迁移用户或同步用户。该用户需要具备源端和目标端数据源对应的权限。 MySQL 数据库作为源端的权限说明 数据库用户需要对待迁移的数据库具备读权限。如果是 M…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.2.2 企业版

# 用户权限说明

更新时间：2025-09-22 15:40:39

OceanBase 迁移服务（OceanBase Migration Service，OMS）迁移数据库前，请确保所有数据源已创建一个数据库用户作为迁移用户或同步用户。该用户需要具备源端和目标端数据源对应的权限。

## MySQL 数据库作为源端的权限说明

- 数据库用户需要对待迁移的数据库具备读权限。如果是 MySQL 数据库 V8.0，请额外赋予 `SHOW VIEW` 权限。

  ```sql
  GRANT SELECT ON <database_name>.* TO '<user_name>';

  ```
 - MySQL 数据库增量同步时，数据库用户需要具备 `REPLICATION CLIENT`、`REPLICATION SLAVE` 和 `SELECT *.*` 权限。

  ```sql
  GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<user_name>' [WITH GRANT OPTION];
  GRANT SELECT ON *.* TO '<user_name>';

  ```

  #### 说明

     - 增量同步时，如果缺少源端所有表的读权限，可能导致项目异常中断。
     - `WITH GRANT OPTION` 为可选参数。  

  如果您在添加 MySQL 数据源时，勾选了 **增量同步时，允许 OMS 自动向该实例写入心跳数据，以解决源端在无业务写入场景下的高延时问题**，OMS 会向对应的 MySQL 数据库创建并更新 `drc.heartbeat` 表。此时，MySQL 数据库用户需要具备创建表、写表的权限。详情请参见 [创建和更新心跳表](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000613500)。
 - 迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 兼容模式时，如果存在反向增量，迁移用户还需要对源端的 `test` 数据库具备 `CREATE`、`SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 权限。

  ```SQL
  GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON test.* TO '<user_name>';

  ```

## MySQL 数据库作为目标端的权限说明

MySQL 数据库作为目标端时，迁移用户需要具备目标端数据库的 `CREATE`、`CREATE VIEW`、`INSERT`、`UPDATE` 和 `DELETE` 权限。

```sql
GRANT <privilege_type> ON <database_name>.<table_name> TO '<user_name>'@'<host_name>' [WITH GRANT OPTION];

```

| 参数 | 描述 |
| --- | --- |
| privilege_type | 授予该账号 `CREATE`、`INSERT` 和 `UPDATE` 等操作权限。如果需要授予该账号所有权限，请使用 ALL。 |
| database_name | 数据库的名称。如果要授予该账号具备所有数据库的操作权限，请使用星号（*）。 |
| table_name | 表的名称。如果要授予该账号具备所有表的操作权限，请使用星号（*）。 |
| user_name | 待授权的账号。 |
| host_name | 允许该账号登录的主机，如果允许该账号从任意主机登录，请使用百分号（%）。 |
| WITH GRANT OPTION | 授予该账号使用 `GRANT` 命令的权限，该参数为可选。 |

## OceanBase 数据库 MySQL 兼容模式作为源端的权限说明

OceanBase 数据库 MySQL 兼容模式作为源端时，迁移/同步用户需要如下权限：

- 目标端为 Kafka、DataHub 和 RocketMQ 等消息队列类型时，需要对源端待同步数据库具备 `SELECT` 权限。

  目标端为 MySQL 数据库、OceanBase 数据库 MySQL 兼容模式等数据库类型时，需要对源端待迁移数据库及 `oceanbase` 数据库具备 `SELECT` 权限。

  #### 注意

  仅 OceanBase 数据库 V4.0.0 及之后版本需要添加 `oceanbase` 数据库的 `SELECT` 权限。
 - 如果是增量数据同步的场景，您需要读取增量日志数据和数据库对象结构信息，请在源端 sys 租户下创建用户，并赋予其 `SELECT ON *.*` 权限。

  ```sql
  GRANT SELECT ON <database_name>.* TO <drc_user>;

  ```
 - 进行 OceanBase 数据库 MySQL 兼容模式之间的数据迁移时，如果存在反向增量，迁移用户还需要对源端的 `test` 数据库具备 `CREATE`、`SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 权限。

  ```

## OceanBase 数据库 MySQL 兼容模式作为目标端的权限说明

OceanBase 数据库 MySQL 兼容模式作为目标端时，迁移用户需要以下权限：

- 对目标端数据库具备 `CREATE`、`CREATE VIEW`、`SELECT`、`INSERT`、`UPDATE`、`ALTER`、`INDEX` 和 `DELETE` 权限。

  ```sql
  GRANT CREATE,CREATE VIEW,SELECT,INSERT,UPDATE,ALTER,INDEX,DELETE ON <database_name>.* TO '<user_name>';

  ```
 - 对整个租户具备 `SELECT` 权限。

  ```sql
  GRANT SELECT ON *.* TO '<user_name>';

  ```

## Oracle 数据库作为源端和目标端的权限说明

Oracle 数据库作为源端时的正向迁移和作为目标端时的反向回流需要的权限是一致的。创建用户后，不同版本的 Oracle 数据库及用户角色所需要赋予的权限说明如下。

#### 说明

- 对于 ADG 备库，有时可能出现授权后权限未生效的问题。此时，您需要在备库执行命令 `ALTER SYSTEM FLUSH SHARED_POOL;` 来刷新 Shared Pool。
 - 本文提供的是非最小化权限说明，需要赋予迁移用户 `SELECT ANY TRANSACTION`、`SELECT ANY TABLE` 和 `SELECT ANY DICTIONARY` 权限。  
  以 Oracle 数据库作为源端时，您可以对 ANY 进行细化，赋予迁移用户最小化权限以提高安全性。详情请参见 [源端 Oracle 数据库的最小化权限](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000613347)。

### 12C 以下 DBA 用户权限赋予说明

如果用户的环境允许为迁移用户赋予数据库管理员（DBA）角色，且 Oracle 数据库的版本为 12C 之前的版本，则只需要执行下述语句，为迁移用户赋予 DBA 权限即可。

```sql
GRANT DBA TO <user_name>;

```

### 12C 以下非 DBA 用户权限赋予说明

如果用户环境对迁移用户的授权较为谨慎，且 Oracle 数据库的版本为 12C 之前的版本，操作如下：

1. 授予 CONNECT 权限。

   ```sql
   GRANT CONNECT TO <user_name>;

   ```
 2. 赋予迁移用户 `CREATE SESSION`、`ALTER SESSION`、`SELECT ANY TRANSACTION`、`SELECT ANY TABLE` 和 `SELECT ANY DICTIONARY` 权限。

   ```sql
   GRANT CREATE SESSION, ALTER SESSION,
   SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <user_name>;

   ```
 3. 赋予迁移用户 `LOGMINER` 相关权限。

   ```sql
   GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <user_name>;

   ```
 4. 赋予迁移用户 `CREATE TABLE` 和 `UNLIMITED TABLESPACE` 权限。

   ```sql
   GRANT CREATE TABLE, UNLIMITED TABLESPACE TO <user_name>;

   ```
 5. 如果迁移的 Schema 名称和 `user_name` 一致，执行下述语句。

   ```sql
   GRANT CREATE SEQUENCE,CREATE VIEW TO <user_name>;

   ```

   如果迁移的 Schema 名称和 `user_name` 不一致，执行下述语句。

   ```sql
   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>;

   ```

   您也可以执行下述语句。

   ```sql
   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

     1. 执行下述授权语句，为迁移用户赋予 DBA 权限。

       ```
     2. 执行下述语句，赋予迁移用户对 `SYS.USER$` 表的读权限。

       ```sql
       GRANT SELECT ON SYS.USER$ TO <user_name>;

       ```
 - PDB

  如果 Oracle 数据库迁移至 OceanBase Oracle 数据库的源端为 12C/18C/19C 的可插拔数据库 Pluggable DataBase（PDB）时，拉取 PDB 的账号需要是 Common 用户。

     1. 执行下述语句，切换至 CDB$ROOT。

       ```sql
       ALTER SESSION SET CONTAINER=CDB$ROOT;

       ```

       每个 Common 用户都可以连接到 Root 容器（被命名为 `CDB$ROOT`）、任何有连接权限的 PDB，并执行相关操作。
     2. 执行下述语句，赋予迁移用户 DBA 权限。

       ```sql
       GRANT DBA TO C##XXX CONTAINER=ALL;

       ```
     3. 执行下述语句，赋予迁移用户对 `SYS.USER$` 表的读权限。

       ```sql
       GRANT SELECT ON SYS.USER$ TO C##XXX CONTAINER=ALL;

       ```

### 12C 及之后非 DBA 用户权限赋予说明

如果用户环境对迁移用户的授权较为谨慎，且 Oracle 数据库的版本为 12C 及之后的版本，操作如下：

- 非 PDB

       ```
     3. 赋予迁移用户 `CREATE SESSION`、`ALTER SESSION`、`SELECT ANY TRANSACTION`、`SELECT ANY TABLE` 和 `SELECT ANY DICTIONARY` 权限。

       ```
     4. 赋予迁移用户 `LOGMINER` 相关权限。

       ```sql
       GRANT LOGMINING TO <user_name>;
       GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <user_name>;

       ```
     5. 赋予迁移用户 `CREATE TABLE` 和 `UNLIMITED TABLESPACE` 权限。

       ```
     6. 如果迁移的 Schema 名称和 `user_name` 一致，执行下述语句。

       ```

       ```
 - PDB

       ```sql
       GRANT CONNECT TO <C##XXX> CONTAINER=ALL;

       ```sql
       GRANT SELECT ON SYS.USER$ TO <C##XXX> CONTAINER=ALL;

       ```sql
       GRANT CREATE SESSION, ALTER SESSION,
       SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <C##XXX> CONTAINER=ALL;

       ```sql
       GRANT LOGMINING TO <C##XXX> CONTAINER=ALL;
       GRANT EXECUTE ON SYS.DBMS_LOGMNR TO <C##XXX> CONTAINER=ALL;

       ```sql
       GRANT CREATE TABLE, UNLIMITED TABLESPACE TO <C##XXX> CONTAINER=ALL;

       ```
     6. 如果迁移的 Schema 名称和 `C##XXX` 一致，执行下述语句。

       ```sql
       GRANT CREATE SEQUENCE, CREATE VIEW TO <C##XXX> CONTAINER=ALL;

       ```

       如果迁移的 Schema 名称和 `C##XXX` 不一致，执行下述语句。

       ```sql
       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;

       ```

## OceanBase 数据库 Oracle 兼容模式作为源端的权限说明

OceanBase 数据库 Oracle 兼容模式作为源端时，迁移/同步用户需要以下权限：

- 对于 OceanBase 数据库 Oracle 兼容模式 V2.2.70 之前的版本，源端迁移用户需要的权限为 `GRANT SELECT ON *.* TO '<user_name>';`。
 - 对于 OceanBase 数据库 Oracle 兼容模式 V2.2.70 及之后的版本，源端迁移用户需要的权限为 `GRANT DBA TO '<user_name>';`。

     - 对于 OceanBase 数据库 Oracle 兼容模式 V4.0.0 及之后版本，源端迁移用户还需要具备 `DBA_OB_ARCHIVELOG` 的 `SELECT` 权限。

      ```SQL
      GRANT SELECT ON DBA_OB_ARCHIVELOG TO '<user_name>';

      ```
     - 对于 OceanBase 数据库 Oracle 兼容模式 V4.2.0 及之后版本，源端迁移用户还需要具备 `DBA_OB_TABLE_LOCATIONS` 的 `SELECT` 权限。

      ```SQL
      GRANT SELECT ON DBA_OB_TABLE_LOCATIONS TO '<user_name>';

      ```

## OceanBase 数据库 Oracle 兼容模式作为目标端的权限说明

目标端 OceanBase 数据库 Oracle 兼容模式的版本不同时，权限使用也不同。

### OceanBase 数据库 Oracle 兼容模式 V2.2.5 或 V2.2.3 的权限说明

您可以通过以下两种方式赋予迁移用户权限：

- 方式一

     - 执行下述语句，授予迁移用户所有权限。该方式较为简单，但赋予的权限较大。

      ```sql
      GRANT ALL PRIVILEGES ON *.* TO <user_name>;

      ```
 - 方式二

     1. 赋予迁移用户对 SYS 下系统视图的 `SELECT` 权限。

       ```sql
       GRANT SELECT ON SYS.* TO <user_name>;

       ```
     2. 赋予迁移用户对业务库表的各类权限。如果存在多个业务库，请分别进行授权。

       ```sql
       GRANT SELECT, UPDATE, DELETE ON <db_name>.* TO <user_name>;
       GRANT CREATE, INDEX, ALTER ON <db_name>.* TO <user_name>;

       ```

### OceanBase 数据库 Oracle 兼容模式 V2.2.7 及之后版本的权限说明

您可以通过以下两种方式赋予迁移用户权限：

- 方式一

  执行下述语句，操作较为简单，但赋予用户的权限较大。

  ```
 - 方式二

  赋予用户对业务库表的各类权限。如果存在多个业务库，请分别授权。

  ```sql
  GRANT CONNECT TO <user_name>;
  GRANT CREATE SESSION, ALTER SESSION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO <user_name>;
  GRANT CREATE ANY TABLE, CREATE ANY INDEX, CREATE ANY VIEW, INSERT ANY TABLE, UPDATE ANY TABLE, ALTER ANY TABLE, DELETE ANY TABLE TO <user_name>;

  ```

## DB2 LUW 数据库作为源端和目标端的权限说明

DB2 LUW 数据库作为源端和目标端时，用户均需要具备 `SYSADM` 权限。

1. 查询 DB2 LUW 数据库的 SYSADM_GROUP（SYSADM 用户组）。

   ```bash
   db2 get dbm cfg | grep SYSADM_GROUP

   ```
 2. 创建用户时指定 DB2 LUW 数据库的 SYSADM_GROUP。

   ```bash
   sudo useradd -g <SYSADM_GROUP> <user_name>
   sudo passwd <user_name>

   ```

## PostgreSQL 数据库作为源端的权限说明

PostgreSQL 数据库至 OceanBase 数据库 MySQL 兼容模式的结构迁移阶段，需要赋予迁移用户对表和视图的 `SELECT` 权限。

PostgreSQL 数据库至 OceanBase 数据库 MySQL 兼容模式的增量同步阶段，需要赋予迁移用户如下权限：

- 如果配置的待迁移表的白名单包含通配符，必须使用 superuser，否则创建 publication 会报错无权限。反之，则可以不使用 superuser。
 - 需要具备 REPLICATION 和 LOGIN 的 role，CREATE PUBLICATION 的权限。

     - `CREATE USER <user_name> REPLICATION LOGIN ENCRYPTED PASSWORD '<password>';`
     - `GRANT CREATE ON DATABASE <database_name> TO <user_name>;`
 - 需要是待迁移表的 Owner。

  ```sql
  // 创建 replication_group。
  CREATE ROLE <replication_group>;  
  // 将待迁移表的原始 Owner 添加至 replication_group。
  GRANT <replication_group> TO <original_owner>;
  // 将迁移账号也添加至 replication_group。
  GRANT <replication_group> TO <replication_user>;
  // 修改待迁移表的 Owner 为新创建的 replication_group。
  ALTER TABLE <table_name> OWNER TO <replication_group>;

  ```
 - 如果您在添加 PostgreSQL 数据源时，勾选了 **增量同步时，允许 OMS 自动向该实例写入心跳数据，以解决源端在无业务写入场景下的高延时问题**，OMS 会向对应的 PostgreSQL 数据库创建并更新 `oms_postgres_heartbeat` PostgreSQL 数据库用户需要具备创建表、写表的权限。详情请参见 [创建和更新心跳表](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000613500)。

## TiDB 数据库作为源端的权限说明

TiDB 数据库的迁移用户需要具备全量 `SELECT` 权限。

```

## DataHub 作为目标端的权限说明

Datahub 根据 endpoint/ak/sk 进行鉴权，详情请参见 [DataHub 权限控制](https://help.aliyun.com/document_detail/158779.html)。

DataHub 用户需要具备 `GetProject`、`CreateTopic`、`ListTopic`、`GetTopic`、`ListShard`、`PutRecords`、`GetRecords` 和 `GetCursor` 权限。

## Kafka 作为目标端的权限说明

如果 Kafka 存在鉴权，请参见 [新建 Kafka 数据源](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000613451)。

Kafka 作为目标端时，同步用户需要具备进行以下操作的权限：

- 创建和查看 Topic
 - 查看 Topic Partition 信息
 - 写入 Record
 - 读取 Record

## RocketMQ 作为目标端的权限说明

RocketMQ 作为目标端时，同步用户需要具备进行以下操作的权限：

- 创建和查看 Topic
 - 查看 Topic MessageQueue 信息
 - 写入 Record
 - 读取 Record

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
