1. 程式人生 > >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 [email protected]”%” identified by “.”; flush privileges; 但是這種重啟之後一會就又不行了。 第二種: 複製檢視建立語句,直接將create改成alter,definer改成相關的,比如
[email protected]
  例如: 用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是否更改成功了。

原因分析
因為建立檢視使用的是[email protected]

%使用者(目前已經不存在),然後登入使用者使用的是[email protected]使用者,導致mysql認為現在的使用者無許可權訪問該檢視,解決方法就是在當前使用者下重建該檢視。

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