The user specified as a definer (”@’%') does not exist完美解決方法

The user specified as a definer (”@’%') does not exist完美解決方法

在給一個客戶做電商項目實施的時候,mysql數據庫報錯The user specified as a definer (”@’%') does not exist。嘗試過兩種方式,第一種重啓之後好用,但是一會就又不好用了。第二種算是一種完美的解決方法。此種報錯主要是針對訪問視圖文件引起的。

第一種:

給root賦值所有權限:注意在命令符下面操作。

grant all privileges on *.* to root@”%” identified by “.”;
flush privileges;
但是這種重啓之後一會就又不行了。
第二種:
複製視圖創建語句,直接將create改成alter,definer改成相關的,比如root@localhost  例如:
用alter view 修改definer的值,alter ALGORITHM=UNDEFINED DEFINER=`public`@`192.168.0.%` SQL SECURITY DEFINER VIEW `view_product` AS 視圖選擇語句。

 

通過執行use information_schema;和 select TABLE_SCHEMA,TABLE_NAME,DEFINER from views; 兩條語句,可以查詢到definer是否更改成功了。

原因分析
因爲創建視圖使用的是xff@%用戶(目前已經不存在),然後登錄用戶使用的是xff@localhost用戶,導致mysql認爲現在的用戶無權限訪問該視圖,解決方法就是在當前用戶下重建該視圖。

題外話:還有一種方法是如果你是運維人員,此問題直接交由程序去處理,讓其檢查創建觸發器、視圖、存儲過程等sql。如果包含root@%,替換之。重新創建。沒有嘗試過,後面可以試試。

發佈了28 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章