背景
最近往現場導了個庫,發現功能報錯,一看是視圖報錯,navicat一看,哎呦,直接報錯。The user specified as a definer ('root'@'%') does not exist。
解決辦法
因為視圖的人在創建的時候
他選擇了定義者才能執行。於是當你切換到其他用戶當然不行啦。
解決辦法1
如果你只有當前用戶,你沒有root用戶的密碼,建議你刪除當前視圖,復制好語句,重新建立。
解決辦法2
如果你有高級用戶的權限輸入命令
grant all privileges on *.* to root@"%" identified by ".";
flush privileges;
將root換成你要授權的用戶。
解決辦法3
將范圍改成
補充一點
針對於視圖的安全性補充一下。
definer
當定義為DEFINER時,必須數據庫中存在DEFINER指定的用戶,並且該用戶擁有對應的操作權限,才能成功執行。與當前用戶是否有權限無關。
invoker
當定義為INVOKER時,只要執行者有執行權限,就可以成功執行。