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'@'%';