安全相關啟動選項對照表
| 選項 | 功能描述 | 安全影響 |
--secure (或 --secure-auth) |
驗證 gethostbyname() 回傳 IP 反解析是否回原主機名;加強主機名檢查 |
增強:防止主機偽裝攻擊,提高基於主機名授權的可靠性 |
--skip-grant-tables |
完全跳過權限系統,**所有人獲得所有資料庫完全存取權** |
極度危險:僅限緊急救援 (如忘記 root 密碼) 短暫使用,必須配合 --skip-networking 限制本地存取 |
--skip-name-resolve |
不解析主機名,授權表 Host 欄只能用 IP 或 localhost |
增強:消除 DNS 攻擊面,加速連線建立;需確保所有帳號 Host 欄位為 IP |
--skip-networking |
禁用 TCP/IP 連線,僅允許 Unix Socket 本地連線 |
增強:阻斷所有網路攻擊面;不適用於需遠端存取的環境,也不支援 MIT-pthreads 系統 |
實務建議組合
生產環境推薦
[mysqld]
skip-name-resolve
secure-auth
# 僅允許本地應用連線時啟用:
# skip-networking
bind-address = 127.0.0.1 # 或特定內網 IP
緊急重置 root 密碼流程
- 停止 MySQL:
systemctl stop mysqld
- 以
--skip-grant-tables --skip-networking 啟動:mysqld_safe --skip-grant-tables --skip-networking &
- 無密碼登入:
mysql -u root
- 更新密碼:
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root'; FLUSH PRIVILEGES;
- 正常重啟 MySQL。
警告: --skip-grant-tables 期間資料庫完全無保護,務必同時啟用 --skip-networking 並限制最短時間窗口。