mysql 執行函數時出現權限問題


1、剛來新公司,因mysql版本陳舊,所以升級版本為5.6,升級導入數據后應用一直被報錯如下

2、各種問題排查后,終於找到問題,原來是mysql創建語句中加入 DEFINER 參數

 

3、了解一下

【definer和invoker的解釋】

    創建存儲過程的時候可以指定 SQL SECURITY屬性,設置為 DEFINER 或者INVOKER,用來奉告mysql在執行存儲過程的時候,,是以DEFINER用戶的權限來執行,還是以調用者的權限來執行。

   默認情況下,使用DEFINER方式,此時調用存儲過程的用戶必須有存儲過程的EXECUTE權限,並且DEFINER指定的用戶必須是在mysql.user表中存在的用戶。

   DEFINER模式下,默認DEFINER=CURRENT_USER,在存儲過程執行時,mysql會檢查DEFINER定義的用戶'user_name'@'host_name'的權限;

   INVOKER模式下,在存儲過程執行時,會檢查存儲過程調用者的權限。

4、解決方式:

 給“@%”添加權限,或者重構函數語句將“@%”刪除即可

5、另外記錄一點,當主機內存不足以被mysql分配內存時,后出現如下報錯:

  InnoDB: mmap(274726912 bytes) failed; errno 12
  2019-06-19 11:38:34 13132 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
  2019-06-19 11:38:34 13132 [ERROR] Plugin 'InnoDB' init function returned error.
  2019-06-19 11:38:34 13132 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
  2019-06-19 11:38:34 13132 [ERROR] Unknown/unsupported storage engine: InnoDB
  2019-06-19 11:38:34 13132 [ERROR] Aborting

  需要將服務其內存調大后才能繼續使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM