这个错误究竟是什么?

时间:2010-03-07 23:04:18

标签: asp.net mysql database-connection

我使用的数据库是MySQL 5.1。我相信,我在web.config中指定了right connectionstring。但是当我运行我的网络应用程序。它引发了这个例外: -

  

MySql.Data.MySqlClient.MySqlException:指定为定义者的用户('root'@'%')不存在

任何帮助。我为什么要这个?

3 个答案:

答案 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而言,术语“定义者”是指创建存储过程以及用户必须存在的存储过程执行的术语。