mysql数据库调用存储过程 err 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法

Mysql的数据库分出了一个用户,给外部系统的使用,然后该用户在插入数据库A表的时候,发现报错:

1449 : The user specified as a definer ('root'@'%') does not exist

但是该用户插入B表缺没有任何问题,一开始我以为权限不够,然后查看了用户权限,发现对应的权限都已经赋予了。而且这个错误也很诡异,我明明不是使用root用户连接数据库的。

然后,我发现A表跟B表是有区别的,A表在插入数据的时候,会调用触发器,触发器会调用存储过程。而B表就没有那么多复杂的东西,就是单纯一个表。

上网找了一下资料,发现果真是触发器以及存储过程权限的问题。

解决方案

找到A表调用的存储过程,把对应的存储过程安全级别更改为INVOKER
在这里插入图片描述

原因

存储过程具有安全级别的设置分别是DEFINER和INVOKER
DEFINER:只有定义改存储过程的用户才能调用
INVOKER:任何有权限的用户都可以调用

补充

如果触发器之前defined 之前是 ‘root@%’,然后数据库用户的root权限更改为了 root@localhost,需要删除触发器,后重新创建触发器

参考资料

mysql数据库调用存储过程 err 1449 : The user specified as a definer (‘用户名’@’%’) does not exist 解决方法