我使用的数据库是MySQL 5.1。我相信,我在web.config中指定了right connectionstring。但是当我运行我的网络应用程序。它引发了这个例外: -
MySql.Data.MySqlClient.MySqlException:指定为定义者的用户('root'@'%')不存在
任何帮助。我为什么要这个?
答案 0 :(得分:28)
您加载的存储过程的源代码可能包含“DEFINER = root @'%'”作为定义的一部分 - 看起来有点像这样:
create definer='root'@'%' procedure sp_test() begin end;
这里的问题是您的系统上没有“root”@'%'的帐户。这很容易证明。从MySQL命令行:
show grants for 'root'@'%';
我希望这会返回一条错误消息:
ERROR 1141 (42000): There is no such grant defined for user 'root' on host '%'
修复方法是更改存储过程的来源,或创建缺少的帐户:
grant all on *.* to 'root'@'%' identified by 'password' with grant option;
从任何地方都可以访问这样一个高性能的帐户通常不是一个好主意,但这是另一个故事。
答案 1 :(得分:3)
我知道这个答案来得很晚,但我找到了一个根本没有改变任何权利的解决方案。
进入存储过程并删除DEFINER
子句。服务器应该写入一个新的DEFINER,它与您登录的用户信息相匹配。
为我工作......
答案 2 :(得分:2)
这是存储过程吗?然后也许this blog post会帮助(强调我的)。
所有设置都很好,我想知道是什么导致了这个问题。起初我认为它可能是一个缓存,因为我最近要求在我们的服务器上安装xcache。
但事实并非如此。这个错误比人们想象的要愚蠢得多。 该特定脚本使用存储过程向/从MySQL插入/获取数据。创建sp的用户是被删除的用户。这就是问题所在。就MySQL而言,术语“定义者”是指创建存储过程以及用户必须存在的存储过程执行的术语。