`mysld` (MySQL Server 守護進程) 提供多個安全相關啟動選項,控制存取驗證、網路暴露面、主機名解析行為。正確配置這些選項是資料庫安全基線的核心組成部分。
功能:
--secure-auth:拒絕使用舊版 (pre-4.1) 雜湊認證的客戶端連線適用場景**:對外服務、不信任網路環境
副作用**:連線建立延遲增加 (DNS 查詢);若 DNS 不穩定可能導致合法連線失敗
建議**:生產環境啟用,並確保 DNS 基礎設施高可用;或改用 --skip-name-resolve 避免 DNS 依賴
功能**:
mysql.user, db, tables_priv 等)風險**:任何能連線埠的人都能完全控制資料庫
緩解措施 (若必須使用)**:
mysqld --skip-grant-tables --skip-networking --socket=/tmp/mysql_recovery.sock
# --skip-networking:禁止 TCP/IP 連線,僅允許本機 Unix socket
# --socket:指定非標準 socket 路徑,降低被發現機率
使用後必須**:正常重啟 mysqld (不帶此選項)、執行 FLUSH PRIVILEGES、驗證權限正常
功能**:
mysql.user 表的 Host 欄**只能填 IP 位址、IP 範圍 (CIDR, 8.0+)、localhost**app-server.example.com) 將無法匹配優點**:
遷移注意**:啟用前必須將所有現有帳號的 Host 值從主機名改為對應 IP
UPDATE mysql.user SET Host = '192.168.1.%' WHERE Host = 'app-server.example.com';
FLUSH PRIVILEGES;
功能**:
適用場景**:
不相容**:
| 部署架構 | 推薦選項組合 | 說明 |
|---|---|---|
| 標準雙機/叢集 (應用+DB 分離) | --secure (預設) + 正確配置 bind-address + 防火牆 + SSL | 依賴 DNS 或 --skip-name-resolve + IP 白名單 |
| 同機應用 (單機部署) | --skip-networking + Unix Socket | 零網路暴露、最高安全、最低延遲 |
| 雲端託管 (RDS/Cloud SQL) | 由雲廠商管理,通常 --skip-name-resolve + VPC 安全群組 | 無法直接控制啟動參數 |
| 緊急密碼重置 | --skip-grant-tables --skip-networking --socket=/tmp/recovery.sock | 最小暴露窗口,用畢即重啟 |
| 高安全合規環境 | --skip-name-resolve --skip-networking (同機) 或 --skip-name-resolve + bind-address=內網IP + SSL | 消除 DNS 攻擊面、強制 IP 白名單 |
# /etc/my.cnf 或 /etc/mysql/my.cnf [mysqld] 區段
[mysqld]
# 安全基線
skip-name-resolve
# skip-networking # 僅同機部署啟用
bind-address = 192.168.1.100 # 內網 IP,非 0.0.0.0
ssl-ca = /etc/mysql/ssl/ca.pem
ssl-cert = /etc/mysql/ssl/server-cert.pem
ssl-key = /etc/mysql/ssl/server-key.pem
require_secure_transport = ON # 8.0+ 強制 SSL
# 密碼策略 (8.0+ validate_password 元件)
validate_password.length = 12
validate_password.policy = MEDIUM
-- 檢查網路監聽
SHOW VARIABLES LIKE 'skip_networking'; -- ON/OFF
SHOW VARIABLES LIKE 'skip_name_resolve'; -- ON/OFF
SHOW VARIABLES LIKE 'secure_auth'; -- ON/OFF
-- 檢查連線方式
SHOW PROCESSLIST; -- Host 欄顯示 IP 或 localhost
-- 測試 DNS 解析行為
-- 啟用 skip-name-resolve 後,主機名帳號應無法連線
四大選項各有明確用途:**--secure** 強化認證、**--skip-grant-tables** 僅限緊急救援、**--skip-name-resolve** 消除 DNS 依賴、**--skip-networking** 徹底隔離網路。生產環境建議:**預設啟用 --secure + --skip-name-resolve + bind-address 內網 IP + SSL/TLS + 防火牆**,同機部署可加 **--skip-networking**。定期審核 mysql.user 確保 Host 欄符合策略。