MySQL迁移中Definer强制转化后如何维持原业务用户权限体系
Definer的使用主要应用在视图、存储过程、触发器、事件等对象里,Definer并不会限制对象被调用的权限,但会限制对象访问数据库的权限。本场景下,用户在MySQL迁移过程中选择了“所有Definer迁移到该用户下”,则源库用户体系下其他用户账号在完成用户迁移后,如果用户迁移和权限授权都执行成功,则无需授权便可继续使用原业务(使用DRS用户迁移功能可以实现用户、权限、密码迁移),否则如果想在原来的用户权限体系下延用原业务,则需要进行授权后才具有Definer相关数据库对象的访问使用权限,从而保证原业务正常。
本章节主要介绍如何通过数据库命令行对用户账号进行授权的方法。
- 确保新用户(Definer统一使用指定账号)具备足够的权限执行视图、存储过程等相关SQL。
- 通过MySQL官方客户端或者其它工具登录目标数据库。
- 通过如下命令查看需要授权的用户user当前权限详情。
show grants for 'user'@'host';
- 为了保证原业务不报错,使用如下命令给用户user授予涉及的数据库对象缺失的操作权限。
grant select,insert,update,delete on db_name.* to 'user'@'host';
一般情况下,访问数据库的权限包括:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、EXECUTE。您需要根据具体的数据库对象查看缺少哪些权限,再进行授权操作。
对于存储过程和函数,必须保证用户user对其有拥有EXECUTE权限,授权SQL命令如下:
grant execute on db_name.function_name to 'user'@'host';
- 使用授权后的用户账号访问目标库对象,无异常报错表示授权成功。需要注意:在java项目工程中调用存储过程、函数如果出现 Java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with "noAccessToProcedureBodies=true" to have driver generate parameters that represent INOUT strings irregardless of actual parametertypes,则需要单独执行用户user对mysql.proc库的授权:
grant select on mysql.proc to 'user'@'host';
实时迁移 所有常见问题
- 如何判断数据迁移任务可以停止
- MySQL迁移中Definer强制转化后如何维持原业务用户权限体系
- MySQL存储过程迁移上云后遇到调用权限的问题,如何解决
- 如何确保业务数据库的全部业务已经停止
- 迁移日志提示can not get agency token
- Oracle到MySQL迁移时,索引超长如何处理
- Oracle等异构数据库迁移到MySQL后的数据库排序规则为什么是utf8mb4_bin
- RDS for MySQL不支持MyISAM引擎表,迁移时MyISAM如何处理
- 低版本迁移至MySQL 8.0,应该注意哪些问题
- MongoDB数据库迁移过程中,源数据库出现内存溢出(OOM)是什么原因
- 如何关闭集合均衡器Balancer
- 如何批量导出、导入事件(event)和触发器(trigger)
- 源库参数lower_case_table_names=1时,为什么不允许迁移包含大写字母的库或者表
- 分片集群MongoDB迁移前清除孤儿文档
- MySQL账号迁移后权限显示多了反斜杠“\”
more