DRS要求的MySQL权限有哪些
DRS在迁移、同步、灾备过程中,对账号有一定的权限要求,本章节主要介绍MySQL引擎的权限要求。
权限要求
- 源和目标库的连接账号需要具有登录权限,如果没有该账号,可以通过如下方式创建,以user1为例。
- DRS的实时迁移、实时同步、实时灾备功能的权限要求,表1 权限要求中以user1为例提供参考语句。
表1 权限要求及参考语句 功能模块
源/业务数据库
目标/灾备数据库
实时迁移
全量迁移权限要求:
SELECT、SHOW VIEW、EVENT。
参考语句:GRANT SELECT, SHOW VIEW, EVENT ON *.* TO 'user1';
全量+增量迁移权限要求:
SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
全量迁移权限要求:
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。
参考语句:GRANT SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER ON *.* TO 'user1' WITH GRANT OPTION;
全量+增量迁移权限要求:
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。
参考语句:GRANT SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCES ON [待迁移数据库].* TO 'user1' WITH GRANT OPTION;
实时同步
SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。全量+增量任务,当源数据库为8.0.2及以上版本时,还需要授予XA_RECOVER_ADMIN权限,以防启动或编辑时未提交的XA事务导致数据有损。
SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES。
参考语句:GRANT SELECT, CREATE, DROP, DELETE, INSERT, UPDATE, ALTER, REFERENCES ON [待同步数据库].* TO 'user1';
实时灾备
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION,RDS for MySQL实例的root账户默认已具备上述权限。当业务数据库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。当业务数据库为8.0.2及以上版本时,还需要授予XA_RECOVER_ADMIN权限,以防启动时未提交的XA事务导致数据有损。RDS for MySQL实例的root账户默认已具备上述权限。
当业务数据库为8.0.2以上版本时,还需要有XA_RECOVER_ADMIN权限。
参考语句:GRANT SELECT,CREATE,ALTER,DROP,DELETE,INSERT,UPDATE,TRIGGER,SHOW VIEW,EVENT,INDEX,LOCK TABLES,CREATE VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,RELOAD,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'user1';
SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION,RDS for MySQL实例的root账户默认已具备上述权限。当灾备数据库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。
参考语句:GRANT SELECT,CREATE,ALTER,DROP,DELETE,INSERT,UPDATE,TRIGGER,REFERENCES,SHOW VIEW,EVENT,INDEX,LOCK TABLES,CREATE VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,RELOAD,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'user1'@'%' WITH GRANT OPTION;
请在以上参考语句后执行flush privileges;使授权生效。
- 用户迁移权限要求
用户迁移时,如果源数据库为8.0版本,需要有mysql.user表的SELECT权限;如果为5.7及以下版本,则需要mysql系统库的SELECT权限,源数据库为阿里云数据库,则账户需要同时具有mysql.user和mysql.user_view的SELECT权限。
参考语句:
GRANT SELECT ON mysql.user TO 'user1'@'host' ;
GRANT SELECT ON mysql.* TO 'user1'@'host' ;
GRANT SELECT ON mysql.user_view TO 'user1';
目标数据库账号需要有所有库的SELECT,INSERT,UPDATE,DELETE, WITH GRANT OPTION权限。
参考语句:GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'user1' WITH GRANT OPTION;
- 函数、存储过程迁移权限要求
对于源数据库为MySQL 5.6、5.7,如果您需要迁移函数、存储过程,则需要MySQL系统库的proc表的SELECT权限。
参考语句:
GRANT SELECT ON `mysql`.`proc` TO 'user1'@'host';
对于源数据库为MySQL 8.0以上版本的时候,如果您需要迁移函数、存储过程,则需要整个实例的SELECT权限。对于MySQL 8.0.20版本以上,也可以使用SHOW_ROUTINE权限来迁移函数、存储过程。参考语句:
GRANT SELECT ON *.* TO 'user1'@'host';
或者:
GRANT SHOW_ROUTINE ON *.* TO 'user1'@'host';
参考资料:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_show-routine
授权操作说明
- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
· username:待创建的账号。
· host:允许该账号登录的主机,如果允许该账号从任意主机登录数据库,可以使用%。
· password:账号的密码。
例如:授予drsmigration账号具备所有数据库和表的所有权限,并允许从任意主机登录数据库,命令如下。
CREATE USER 'drsmigration'@'%' IDENTIFIED BY 'Drs123456';
- 授予相应权限
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
flush privileges;
· privileges:授予该账号的操作权限,如SELECT、INSERT、UPDATE等,如果要授予该账号所有权限,则使用ALL
· databasename:数据库名。如果要授予该账号具备所有数据库的操作权限,则使用*。
· tablename:表名。如果要授予该账号具备所有表的操作权限,则使用*。
· username:待授权的账号。
· host:允许该账号登录的主机,如果允许该账号从任意主机登录,则使用%。
· WITH GRANT OPTION:授予该账号使用GRANT命令的权限,该参数为可选。
例如:创建一个账号,账号名为drsmigration,密码为Drs123456,并允许从任意主机登录数据库,命令如下。
GRANT ALL ON *.* TO 'drsmigration'@'%';