问题

在程序调用mysql存储过程的时候报错:

the user specified as a definer ('root'@'%') does not exist

原因

环境运行之后,把数据库用root用户导出来,到别的环境下使用。
这个时候,在查询数据库表的状态可以看到语句是这样的:

CREATE DEFINER=`root`@`%` PROCEDURE ....

导出的时候会自带root。
当去掉"DEFINER=root@%"导入的时候,用哪个用户导入的,就会变成哪个用户。

此时被迁移的环境一运行,调用存储过程就出错了。但此时其他非root用户已经授权了。

为什么?他是以root用户的身份调用的存储过程。root没有被授权。

解决方法

方法一:
把存储过程导出来,修改用户之后再导回去;
方法二:
给"DEFINER"指定的用户授权

grant all on *.* to 'root'@'%' identified by 'lisi123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

注意:root换成表里DEFINER的用户,这条语句是给这个用户赋予全部权限的,而实际上只要指定自己的表就行了。

参考网址

https://cloud.tencent.com/developer/article/1765267

posted on 2022-06-08 19:40  步孤天  阅读(346)  评论(0编辑  收藏  举报