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

MySQL sql_safe_updates 參數詳解:防誤刪誤改的安全衛士

     編輯:MySQL 綜合教學

參數作用

sql_safe_updates(別名 safe_updates)是一個會話級/全局變量,默認值 0(關閉)。設為 1(開啟) 後,會阻止以下「不安全」的 UPDATE/DELETE 語句執行:

  • UPDATE:必須同時滿足 WHERE 條件使用鍵(主鍵/唯一鍵/索引列) 或 LIMIT 子句(或兩者皆有)。
  • DELETE:必須 同時 擁有 WHERE 條件使用鍵 且 LIMIT 子句。

行為示例

表結構語句sql_safe_updates=1 結果
有主鍵 idUPDATE t SET c=1 WHERE id=5✅ 允許(WHERE 用主鍵)
有主鍵 idUPDATE t SET c=1 WHERE name='abc'❌ 阻擋(WHERE 用非鍵列)
無任何鍵UPDATE t SET c=1 LIMIT 10✅ 允許(有 LIMIT)
有主鍵 idDELETE FROM t WHERE id=5❌ 阻擋(缺 LIMIT)
有主鍵 idDELETE FROM t WHERE id=5 LIMIT 1✅ 允許

適用場景與建議

  • 生產環境推薦開啟:防止「忘寫 WHERE」或「WHERE 命中全表」導致災難性誤操作。
  • 開發/測試環境可關閉:方便批量數據修正。
  • 動態切換:
    SET SESSION sql_safe_updates = 1;  -- 當前會話生效
    SET GLOBAL sql_safe_updates = 1;   -- 新連接生效(需 SUPER 權限)
  • 配合 --safe-updates 客戶端啟動參數:mysql 命令行啟動時自動開啟。

注意事項

  1. 僅影響 UPDATE/DELETE,不影響 SELECT/INSERT/REPLACE。
  2. 若表確無索引且業務必須全表更新,需臨時關閉或添加 LIMIT(如 LIMIT 99999999)。
  3. 不替代權限控制:應配合最小權限賬號、事務、備份策略共同構建防線。

善用 sql_safe_updates,為數據安全加一把「防呆鎖」。

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