我正在使用的數據庫是MySQL 5.1。我指定,我相信,在我的web.config中正確的connectionstring。但是當我運行我的web應用程序。它拋出此異常: -這個錯誤究竟是什麼?
MySql.Data.MySqlClient.MySqlException:指定一個定義的用戶( '根' @ '%')不存在
任何幫助。爲什麼我得到這個?
我正在使用的數據庫是MySQL 5.1。我指定,我相信,在我的web.config中正確的connectionstring。但是當我運行我的web應用程序。它拋出此異常: -這個錯誤究竟是什麼?
MySql.Data.MySqlClient.MySqlException:指定一個定義的用戶( '根' @ '%')不存在
任何幫助。爲什麼我得到這個?
對於您已經裝載可能包含存儲過程的源代碼「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;
它不是一般有從任何地方訪問這樣一個高功率的帳戶是一個好主意,但那是另一回事。
這是存儲過程嗎?那麼也許this blog post幫助(強調我的)。
所有的設置都很好,我想知道是什麼導致了這個問題。起初,我認爲它可能是緩存,因爲我最近要求在我們的服務器上安裝xcache。
但事實並非如此。這個錯誤比人們想象的要愚蠢得多。 該特定腳本使用存儲過程向MySQL中插入數據/從MySQL獲取數據。創建sp的用戶是被刪除的用戶。這就是問題所在。根據MySQL的術語「定義者」是創建存儲過程和用戶必須存在的存儲過程的執行者。
我知道這個答案來得非常晚,但我找到了一個解決方案,根本不涉及修改任何權利。
進入您的存儲過程並刪除DEFINER
條款。服務器應該寫入一個與您登錄的用戶信息相匹配的新DEFINER。
工作對我來說......
+1不錯!我有一個與用戶名中的主機規範有關的暗示。我們會看看是否這樣。 – 2010-03-08 13:10:50