最近收到用户在使用应用的过程中,应用程序有报错,查看日志execute command denied to user ''@'%' for routine 。
开始度娘,很多文章写到是授权的问题,方法如下:
GRANT ALL PRIVILEGES ON *.* TO ‘用户名’@’%’ ;
FLUSH PRIVILEGES;
执行完后数据库和应用重启仍然解决不了,最后自己研究发现,打开存储过程的时候发现了问题,存储过程开头的内容如下:
CREATE DEFINER=``@`` PROCEDURE `
DEFINER后面竟然是空的,正常的是这样子
CREATE DEFINER=`root`@`localhost`
原来是DEFINER的问题,不知道什么原因为什么会变成这个样子,知道原因就好解决了
可以用如下方法,或者重新建立存储过程。
update mysql.proc set definer='user@localhost'; -- 如果有限定库或其它可以加上where条件