萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

解決 MySQL 匯入存儲過程後無法執行的權限問題

問題背景

將資料庫透過 MySQL 匯入後,若其中包含存儲過程,往往會發現存儲過程無法被應用程式正常呼叫。經過排查,這通常是權限設定問題導致的。

解決方案:修改 Definer 與 Security_type

首先,我們可以透過以下指令查看目前資料庫中的存儲過程狀態:

mysql> show function status;

存儲過程狀態查看結果

假設應用程式連線資料庫的帳號為 leiming,連線位址為 127.0.0.1。需執行以下兩條 SQL 指令來修正權限:

mysql> update mysql.proc set Definer='leiming@127.0.0.1';
mysql> update mysql.proc set Security_type='INVOKER';

注意: 上述指令會修改所有存儲過程。若僅需修改特定存儲過程,請加上 WHERE 條件限制範圍。

補充:匯入存儲過程報錯 log_bin_trust_function_creators 的處理

若匯入時出現以下錯誤:

you *might* want to use the less safe log_bin_trust_function_creators variable

請進入 MySQL 執行:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

完成後退出並重新匯入存儲過程即可成功。

copyright © 萬盛學電腦網 all rights reserved