The user specified as a definer (」@’%') does not e

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


第一種:sql


給root賦值全部權限:注意在命令符下面操做。數據庫


grant all privileges on *.* to root@」%」 identified by 「.」;運維

flush privileges;ide

可是這種重啓以後一會就又不行了。.net

第二種:orm

複製視圖建立語句,直接將create改爲alter,definer改爲相關的,好比root@localhost  例如:ci

用alter view 修改definer的值,alter ALGORITHM=UNDEFINED DEFINER=`public`@`192.168.0.%` SQL SECURITY DEFINER VIEW `view_product` AS 視圖選擇語句。get

 


經過執行use information_schema;和 select TABLE_SCHEMA,TABLE_NAME,DEFINER from views; 兩條語句,能夠查詢到definer是否更改爲功了。io


緣由分析

由於建立視圖使用的是xff@%用戶(目前已經不存在),而後登陸用戶使用的是xff@localhost用戶,致使mysql認爲如今的用戶無權限訪問該視圖,解決方法就是在當前用戶下重建該視圖。


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

相關文章
相關標籤/搜索