更新时间:2022-08-16 GMT+08:00
MySQL存储过程迁移上云后遇到调用权限的问题,如何解决
MySQL存储过程迁移上云后,可能会因为权限问题导致调用存储过程或函数出错。
针对该情况,不同的Definer策略有不同的处理方法。本章节主要以user1为示例,介绍两种迁移Definer的策略下的处理方法。
策略一
在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“是”。
这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号都会自动修改为user1,host改为% 。若在目标库上出现调用存储过程失败的情况,可执行如下操作:
- 使用uesr1账号登录到目标库RDS for MySQL实例。
- 如果需要使用其他账号调用存储过程,则该账号需要具有execute权限。
- 通过如下语句,使用user1授予其他账号执行存储过程的权限。
其中user表示需要调用存储过程的其他账号:
GRANT EXECUTE ON db.* TO user;
- 如果需要通过Java调用存储过程,则需要通过如下语句,使用user1授予其他账号查询mysql.proc表的权限。
授权语句可参考如下语句,user表示需要调用存储过程的账号:
GRANT SELECT ON mysql.proc TO 'user'@'%';
策略二
在测试连接页面的目标库信息中填写数据库用户名user1,所有Definer迁移到该用户下选“否”。
这种策略下,源库所有存储过程和方法的Definer迁移到目标库后账号和host保持不变,选择此选项,需要配合功能,将源数据库的用户全部迁移,这样才能保持源数据库的权限体系完全不变。
如果您未选择用户权限迁移或者用户权限迁移时存在不支持迁移的账号,建议选择策略一来处理。
父主题: 实时迁移