在給一個客戶作電商項目實施的時候,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@%,替換之。從新建立。沒有嘗試過,後面能夠試試。