The user specified as a definer (”@’%') does not e

在给一个客户作电商项目实施的时候,mysql数据库报错The user specified as a definer (”@’%') does not exist。尝试过两种方式,第一种重启以后好用,可是一会就又很差用了。第二种算是一种完美的解决方法。此种报错主要是针对访问视图文件引发的。mysql


第一种:sql


给root赋值全部权限:注意在命令符下面操做。数据库


grant all privileges on *.* to root@”%” identified by “.”;运维

flush privileges;ide

可是这种重启以后一会就又不行了。.net

第二种:orm

复制视图建立语句,直接将create改为alter,definer改为相关的,好比root@localhost  例如:ci

用alter view 修改definer的值,alter ALGORITHM=UNDEFINED DEFINER=`public`@`192.168.0.%` SQL SECURITY DEFINER VIEW `view_product` AS 视图选择语句。get

 


经过执行use information_schema;和 select TABLE_SCHEMA,TABLE_NAME,DEFINER from views; 两条语句,能够查询到definer是否更改为功了。io


缘由分析

由于建立视图使用的是xff@%用户(目前已经不存在),而后登陆用户使用的是xff@localhost用户,致使mysql认为如今的用户无权限访问该视图,解决方法就是在当前用户下重建该视图。


题外话:还有一种方法是若是你是运维人员,此问题直接交由程序去处理,让其检查建立触发器、视图、存储过程等sql。若是包含root@%,替换之。从新建立。没有尝试过,后面能够试试。