问题
在程序调用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://www.cnblogs.com/bugutian/
分类:
开发基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2020-06-08 rook重新安装ceph时,osd的pod总是重启
2020-06-08 如何查看当前的内核版本、内核的启动顺序以及设置内核启动顺序