更新时间:2023-01-05 GMT+08:00

目标数据库用户权限是否足够

MySQL迁移场景

表1 目标数据库用户权限是否足够

预检查项

目标数据库用户权限是否足够。

描述

检查用户提供的目标数据库账号权限是否符合迁移要求,若权限不够,会导致迁移失败。

不通过提示处理建议

不通过原因:目标数据库的用户帐号权限不够,需要具备SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、WITH GRANT OPTION这些权限。当目标库为是8.0.14-8.0.18版本,还需要SESSION_VARIABLES_ADMIN权限。

处理建议:查看提供的目标库帐号权限是否符合迁移要求。

不通过原因:用户基本权限不足。

处理建议:查看对应数据库账号权限是否符合迁移要求。

PostgreSQL同步场景

表2 目标数据库用户权限是否足够

预检查项

目标数据库用户权限是否足够。

描述

按照需要同步对象的范围,授予不同的权限,有不同的要求。

  • 库级同步对象

    CREATEDB权限,同步账户为root或root的成员(仅特殊场景需要,详见下面说明)。

  • 表级同步对象

    若要同步库:CREATEDB权限。

    若要同步模式:模式所在库的CONNECT权限、模式所在库上的CREATE权限。

    若要同步模式下的对象:模式所在库的CONNECT权限、对象所在模式的USAGE权限、对象所在模式上的CREATE权限。

  • 同步用户:CREATEROLE权限。
  • 同步对象权限:同步账户的default privilege为系统默认值(否则可能导致目标库对象权限与源库不一致)。

不通过提示处理建议

不通过原因:填写的目标数据库用户权限不足,需要具备CREATEDB权限。

处理建议:在目标数据库执行如下语句,赋予迁移账号CREATEDB权限。

alter role username with createdb;

不通过原因:用户没有SCHEMA的USAGE权限。

处理建议:在目标数据库执行如下语句,赋予迁移账号CREATEDB权限。

grant usage on schema schemaname to username;

不通过原因:用户没有创建TABLE的权限。

处理建议:在目标数据库执行如下语句,赋予迁移账号创建TABLE权限。

grant create on schema schemaname to username;

不通过原因:用户没有创建SCHEMA的权限。

处理建议:在目标数据库执行如下语句,赋予迁移账号创建SCHEMA的权限。

grant create on database to username;

MongoDB迁移场景

表3 目标数据库用户权限是否足够

预检查项

目标数据库用户权限是否足够。

描述

检查用户提供的目标数据库账号权限是否符合迁移要求,若权限不够,会导致迁移失败。

不通过提示处理建议

不通过原因:目标数据库连接失败,导致该项检查无法进行。

处理建议:查看目标数据库连接是否成功。

不通过原因:连接目标数据库的用户需要有admin的dbAdminAnyDatabase权限,有config的read权限,有目标数据库的readWrite权限。

处理建议:为连接目标数据库的用户赋权,参考:

db.grantRolesToUser("用户名",[{role:"dbAdminAnyDatabase",db:"admin"}, {role:"read",db:"config"}, {role:"readWriteAnyDatabase",db:"admin"}])

不通过原因:连接目标数据库的用户权限需要有待迁移库的readWrite权限。

处理建议:为连接目标数据库的用户赋权,参考:

db.grantRolesToUser("用户名",[{role:"readWriteAnyDatabase",db:"admin"}])

不通过原因:连接目标数据库的用户权限需要有config的read权限。

处理建议:为连接目标数据库的用户赋权,参考:

db.grantRolesToUser("用户名",[{role:"read",db:"config"}])

不通过原因:连接目标数据库的用户权限需要有admin的dbAdminAnyDatabase权限。

处理建议:为连接目标数据库的用户赋权,参考:

db.grantRolesToUser("用户名",[{role:"dbAdminAnyDatabase",db:"admin"}])

不通过原因:连接目标数据库的用户权限需要有admin的clusterManager权限。

处理建议:为连接目标数据库的用户赋权,参考:

db.grantRolesToUser("用户名",[{role:"clusterManager",db:"admin"}])