首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL mysqld 安全相關啟動選項完整解析:權限控制、網路隔離、認證相容與 UDF 限制

     編輯:MySQL 資料庫相關知識

選項分類總覽

選項功能建議值 (生產)風險等級
--allow-suspicious-udfs允許載入無輔助符號的 UDFOFF (預設)🔴 高
--local-infile[=0|1]允許客戶端 LOAD DATA LOCAL INFILE0 (禁用)🟠 中
--old-passwords新密碼產生舊格式雜湊 (pre-4.1)OFF🔴 高 (降級安全)
--safe-user-createGRANT 建立用戶需 mysql.user INSERT 權限ON🟢 低
--secure-auth拒絕舊格式密碼帳號登入ON (5.6+ 預設)🟢 低
--skip-grant-tables完全跳過權限系統 (所有人全權限)絕禁生產🔴 極高
--skip-name-resolve禁用主機名 DNS 反查,僅允許 IP/localhostON🟢 低
--skip-networking禁用 TCP/IP,僅 Unix Socket視架構🟡 中
--skip-show-databaseSHOW DATABASES 僅顯示有權限的庫ON🟢 低

深度解析關鍵選項

--skip-grant-tables:緊急救援專用

  • 用途:忘記 root 密碼、權限表損壞緊急修復。
  • 風險:任何人可無密碼登入並執行任意操作。
  • 流程:啟動 → 修復密碼/權限 → FLUSH PRIVILEGES → 移除參數重啟。

--local-infile:資料外洩風險

  • 攻擊場景:惡意服務器誘導客戶端上傳任意本地檔案 (/etc/passwd、.ssh/id_rsa)。
  • 防護:伺服器端 --local-infile=0,客戶端需顯式 --local-infile=1 雙向確認。

--skip-name-resolve:效能與穩定雙贏

  • 省去 DNS 反查延遲 (常見 100ms-2s)。
  • 避免 DNS 故障導致連線暴增/超時。
  • 前提:權限表 Host 欄位僅用 IP/localhost,無主機名。

--safe-user-create:權限最小化落地

-- 授予建立用戶權限但不給修改權限欄位
GRANT INSERT(User) ON mysql.user TO 'admin'@'localhost';

殘留/廢棄選項

  • --safe-show-database:5.1+ 由 SHOW DATABASES 權限取代,參數無效。

生產環境標準啟動配置範例

[mysqld]
# 安全基線
skip-name-resolve
secure-auth
safe-user-create
skip-show-database
local-infile=0
allow-suspicious-udfs=0

# 網路
bind-address = 10.0.0.10  # 僅內網 IP
# skip-networking         # 若僅本機 Unix Socket 存取

# 審計
log-raw = ON
log_warnings = 2

結語

mysqld 安全選項是纵深防禦第一層。原則:默認拒絕、顯式放行、最小權限、審計可追溯。將上述基線納入自動化部署模板,定期掃描偏差,構建可合規的資料庫安全態勢。

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