2010-03-07 77 views
14

我正在使用的數據庫是MySQL 5.1。我指定,我相信,在我的web.config中正確的connectionstring。但是當我運行我的web應用程序。它拋出此異常: -這個錯誤究竟是什麼?

MySql.Data.MySqlClient.MySqlException:指定一個定義的用戶( '根' @ '%')不存在

任何幫助。爲什麼我得到這個?

回答

28

對於您已經裝載可能包含存儲過程的源代碼「DEFINER =根@‘%’」作爲定義的一部分 - 看起來有點像這樣:

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; 

它不是一般有從任何地方訪問這樣一個高功率的帳戶是一個好主意,但那是另一回事。

+0

+1不錯!我有一個與用戶名中的主機規範有關的暗示。我們會看看是否這樣。 – 2010-03-08 13:10:50

2

這是存儲過程嗎?那麼也許this blog post幫助(強調我的)。

所有的設置都很好,我想知道是什麼導致了這個問題。起初,我認爲它可能是緩存,因爲我最近要求在我們的服務器上安裝xcache。

但事實並非如此。這個錯誤比人們想象的要愚蠢得多。 該特定腳本使用存儲過程向MySQL中插入數據/從MySQL獲取數據。創建sp的用戶是被刪除的用戶。這就是問題所在。根據MySQL的術語「定義者」是創建存儲過程和用戶​​必須存在的存儲過程的執行者。

+0

謝謝。我嘗試了鏈接中給出的解決方案。我刪除了整個數據庫,重新創建爲登錄用戶(root)。但仍然有相同的錯誤 – Jango 2010-03-07 23:20:26

+0

+1 - 我認爲Pekka是正確的。我添加了另一個試圖更詳細地解釋事情的答案。 – Martin 2010-03-08 13:05:11

3

我知道這個答案來得非常晚,但我找到了一個解決方案,根本不涉及修改任何權利。

進入您的存儲過程並刪除DEFINER條款。服務器應該寫入一個與您登錄的用戶信息相匹配的新DEFINER。

工作對我來說......