首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 用戶權限配置實戰:存儲過程權限缺失導致遠程工具操作失敗排查

     編輯:MySQL 綜合教學

故障現象

使用遠程管理工具(如 Navicat、Workbench)連接 MySQL,查詢正常,但刪除/修改/執行存儲過程報錯。錯誤碼通常為 1370、1418 或無明確提示僅操作無響應。

根因分析

遠程工具執行 DDL/DML 往往封裝為存儲過程/預處理語句調用。用戶雖有 SELECT, INSERT, UPDATE, DELETE 權限,但缺失 EXECUTE、CREATE ROUTINE、ALTER ROUTINE 權限,導致工具內部調用失敗。

權限檢查與補全

-- 1. 查看當前權限
SHOW GRANTS FOR 'app_user'@'10.0.1.%';
-- 輸出示例:
GRANT USAGE ON *.* TO 'app_user'@'10.0.1.%' IDENTIFIED BY PASSWORD '*...'
GRANT SELECT, INSERT, UPDATE, DELETE ON `biz_db`.* TO 'app_user'@'10.0.1.%'

-- 2. 補充存儲過程相關權限
GRANT EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `biz_db`.* TO 'app_user'@'10.0.1.%';
FLUSH PRIVILEGES;

-- 3. 驗證新權限
SHOW GRANTS FOR 'app_user'@'10.0.1.%';
-- 應包含:EXECUTE, CREATE ROUTINE, ALTER ROUTINE

導入存儲函數報錯 1418 解決

現象:mysqldump -uroot -ntd -R db_name > db.sql 導入時:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled

根因:log_bin_trust_function_creators=OFF(默認),禁止創建不確定性函數。

解決:

-- 1. 檢查當前值
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
-- 輸出:OFF

-- 2. 臨時開啟(全局動態生效)
SET GLOBAL log_bin_trust_function_creators = 1;

-- 3. 導入 SQL 文件
mysql -uroot -p db_name < db.sql

-- 4. 導入完成後關閉(安全建議)
SET GLOBAL log_bin_trust_function_creators = 0;

完整權限矩陣參考

權限作用對象典型場景
SELECT表/視圖/列查詢業務數據
INSERT/UPDATE/DELETE表增刪改業務數據
EXECUTE存儲過程/函數調用存儲過程、函數
CREATE ROUTINE庫創建存儲過程/函數
ALTER ROUTINE存儲過程/函數修改/刪除存儲過程/函數
CREATE TEMPORARY TABLES庫創建臨時表(複雜查詢中轉)
LOCK TABLES庫手動鎖表(批量導入/Schema 變更)
REFERENCES表/列創建外鍵約束
TRIGGER表創建/刪除觸發器
EVENT庫創建/執行定時事件

最佳實踐:遠程工具專用賬號

-- 建立專用賬號,權限最小化但覆蓋工具全功能
CREATE USER 'tool_user'@'10.0.1.%' IDENTIFIED BY 'ToolPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, CREATE ROUTINE, ALTER ROUTINE,
      CREATE TEMPORARY TABLES, LOCK TABLES, REFERENCES, TRIGGER, EVENT
ON `biz_db`.* TO 'tool_user'@'10.0.1.%';
FLUSH PRIVILEGES;

總結

遠程工具操作失敗常因隱性權限缺失(EXECUTE/CREATE ROUTINE/ALTER ROUTINE)。標準排查:SHOW GRANTS → 對比工具功能需求 → 補充缺失權限 → FLUSH PRIVILEGES。導入存儲函數需臨時開啟 log_bin_trust_function_creators=1,導入後立即關閉。建立專用工具賬號,權限矩陣覆蓋全功能,避免反復排查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved