資料庫安全不僅是設定密碼,涵蓋網路傳輸、存取控制、審計追蹤、參數調校等多層面。本文彙整 23 項生產環境驗證的 MySQL 安全最佳實踐,供 DBA 與開發人員參考。
nmap -p 3306 或 telnet host 3306 驗證。ssl-ca、ssl-cert、ssl-key,強制客戶端加密連線。SHA-256、bcrypt 或 Argon2 雜湊,資料庫內不存明文。validate_password 元件強制複雜度。GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'strong_pass';SELECT, INSERT, UPDATE, DELETE 於特定庫/表。user 表存取:僅 root 可讀寫 mysql.user,防密碼雜湊外洩。PROCESS、SUPER、FILE 高危權限:非 DBA 帳號嚴禁授予。GRANT / REVOKE 精細授權:避免 GRANT ALL ON *.*。max_user_connections 限制單帳號連線數:防單一帳號佔滿連線池。prepare()、JDBC PreparedStatement。%27、雙引號 %22、井號 %23 等編碼處理。mysql 用戶,chown -R mysql:mysql /var/lib/mysql。--skip-symbolic-links,防目錄遍歷。mysql 用戶可讀寫 /var/lib/mysql。SHOW DATABASES 全域顯示:啟動參數 --skip-show-databases。audit_log 或 MariaDB Audit Plugin 記錄 DDL/DML。# 1. 停止服務
systemctl stop mysqld
# 2. 跳過權限表啟動
mysqld_safe --skip-grant-tables &
# 3. 無密碼登入重設
mysql -u root mysql -e "UPDATE user SET Password=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;"
# 4. 正常重啟
systemctl restart mysqld
安全是持續過程而非一次性配置。建議將上述 23 項納入部署清單、定期巡檢、自動化合規掃描,構建纵深防禦體系。