| 層級 | 配置 | 效果 |
| 伺服器編譯 | ./configure --disable-local-infile | 徹底移除功能,無法運行期開啟 |
| 伺服器運行期 | --local-infile=0 (預設 8.0+) | 拒絕所有 LOAD DATA LOCAL 指令 |
| 客戶端程式 | mysql --local-infile=0 (預設) | 客戶端拒絕發送 LOCAL 指令 |
| 應用程式碼 | 連線參數 MYSQL_OPT_LOCAL_INFILE=0 | 連接器層面禁用 |
原則:四層同時生效,任一層禁用即阻斷功能。
啟用例外場景 (若業務必須)
- 伺服器
my.cnf:local-infile=1
- 客戶端連線字串:
?allowLocalInfile=true (Connector/J) / MYSQL_OPT_LOCAL_INFILE=1 (C API)
- 限制:僅允許受信任應用帳號、指定來源 IP、審計日誌記錄每次執行。
選項檔配置 (舊版客戶端相容)
[client]
loose-local-infile=1 # loose- 前綴避免舊版客戶端報錯
錯誤訊息識別
ERROR 1148 (42000): The used command is not allowed with this MySQL version
表示雙向任一端已禁用 LOCAL 功能。
結語
LOAD DATA LOCAL 是歷史兼容性遺留的高風險功能。現代最佳實踐:全面禁用 (編譯/運行/客戶端/應用四層),業務遷移至 LOAD DATA INFILE (伺服器端檔案、可控路徑) 或應用層流式寫入。若極少數場景必須保留,實施最小權限帳號、IP 白名單、全審計三重防護。
- 上一篇文章: MySQL 安全強化全景指南:密碼傳輸加密、最小權限、root 禁用、審計與防火牆纵深防禦
- 下一篇文章: MySQL 10 個鮮為人知的實用技巧:XML 輸出、快速重建索引、壓縮表、CSV 匯出、Strict 模式與監控命令
Copyright ©
程式碼之家 All Rights Reserved