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

MySQL 用戶權限體系深度解析與存儲函數導入避坑指南

     編輯:MySQL 綜合教學

權限診斷實戰:遠程工具可讀不可寫

現象:遠程管理工具能查數據,但刪除/修改失效。排查發現工具通過存儲過程/函數操作數據,而用戶缺少 EXECUTE、CREATE ROUTINE、ALTER ROUTINE 權限。

權限檢查與授予

層級語法示例適用場景
全局GRANT ALL ON *.* TO 'admin'@'%'DBA、監控賬號
庫級GRANT ALL ON db1.* TO 'dev'@'10.0.%'開發/測試賬號
表級GRANT SELECT, INSERT ON db1.t1 TO 'app'@'%'應用賬號最小權限
列級GRANT SELECT (id, name) ON db1.t1 TO 'report'@'%'敏感字段隔離
程序級GRANT EXECUTE ON PROCEDURE db1.proc1 TO 'user'@'%'存儲過程調用


常用權限分類

  • 數據操作:SELECT, INSERT, UPDATE, DELETE
  • 結構變更:CREATE, ALTER, DROP, INDEX
  • 存儲程序:CREATE ROUTINE, ALTER ROUTINE, EXECUTE
  • 管理權限:GRANT OPTION, SUPER, RELOAD, SHUTDOWN, PROCESS, FILE
  • 復制權限:REPLICATION SLAVE, REPLICATION CLIENT

存儲函數導入報錯 1418 徹底解決

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

原因:Binlog 啟用時,創建函數必須聲明確定性特性,默認參數 log_bin_trust_function_creators=OFF 阻攔導入。

解決方案

[mysqld]
log_bin_trust_function_creators = 1

注意:永久開啟降低安全性(允許非確定性函數寫 Binlog 導致主從不一致),建議僅導入期間臨時開啟。

函數聲明最佳實踐(避免依賴信任參數)

-- 創建
CREATE USER 'user'@'%' IDENTIFIED BY 'pass';

-- 修改密碼
ALTER USER 'user'@'%' IDENTIFIED BY 'newpass';
-- 或 5.7.6+
SET PASSWORD FOR 'user'@'%' = 'newpass';

-- 重命名
RENAME USER 'old'@'%' TO 'new'@'%';

-- 刪除
DROP USER 'user'@'%';

-- 查看所有用戶
SELECT User, Host FROM mysql.user;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved