[Err] 1449 - The user specified as a definer ('rybhe'@'%') does not exist


轉載:

最近在做一個項目,由於服務器切換,所以需要將原有服務器的mysql數據表以及存儲過程導入到另一個服務器的mysql數據庫中。導入完成之后以為一切是那么的簡單,卻沒有想到總還是出現了一些莫名其妙的問題。

我在用程序調用存儲過程時,總是提示錯誤:

1 The user specified as a definer ('test'@'%') does not exist 1449

查看了自己mysql的用戶表后,發現確實沒有test這個用戶,但是我程序用的是root登錄的,所以感覺有些莫名其妙。

后來通過查資料發現,是由於自己存儲過程設置的安全性為definer,而當時的那個數據庫存在test這個用戶且用的test用戶創建的存儲過程。

所以解決方法主要有以下兩種:

保持definer安全性

1)在navicat上進行修改

將定義者從test改為在該服務器存在的用戶(一般每個服務器都有root@localhost)

2)通過sql語句修改

1 mysql>update mysql.proc set DEFINER='root@localhost' WHERE NAME='' AND db='mydb';

其中,mysql.proc是固定的,definer即要改為的用戶名,name為存儲過程名,db為數據庫名

 

將安全性修改為invoker

1)在navicat上進行修改

2)通過sql語句進行修改

1 ALTER PROCEDURE proc_name SQL SECURITY INVOKER 2 ALTER PROCEDURE proc_name SQL SECURITY DEFINE

 

補充:對於Linux,mysql等工具,操作都需要用戶權限,之所以在大多數操作時,沒有出現問題是因為默認是root用戶,root用戶具有最高權限可以操作。

但當操作某些專有的東西功能時,需要登錄對應的用戶信息才可以操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM