MySQL 官方安全建議的核心內容:強制密碼、非 root 運行、權限最小化、文件權限隔離、通信加密、DNS 信任控制。本文結合現代版本特性(mysql_native_password、caching_sha2_password、SSL、require_secure_transport)給出落地清單。
# 初始化腳本階段或安裝後立即執行
mysql -uroot mysql -e "UPDATE user SET authentication_string=PASSWORD('StrongPass!') WHERE User='root'; FLUSH PRIVILEGES;"
# 或 5.7.6+
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPass!';"
無密碼賬號允許任意用戶名登錄(mysql -u any_user db),極度危險。
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 數據目錄權限
chown -R mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql
# 啟動腳本指定 --user=mysql(systemd/RPM/DEB 包默認已配置)
root 運行 mysqld 將導致 LOAD DATA INFILE/SELECT ... INTO OUTFILE 擁有 root 文件系統權限。
| 高危權限 | 風險 | 授予建議 |
|---|---|---|
PROCESS | 可見所有連接執行的 SQL(含修改密碼語句) | 僅 DBA/監控賬號 |
FILE | 可讀/寫服務器文件系統(LOAD DATA INFILE '/etc/passwd') | 極少授予,嚴格審計 |
SHUTDOWN | 可關閉數據庫服務 | 僅運維自動化賬號 |
GRANT OPTION | 可將自己權限轉授他人 | 僅 DBA |
SUPER | 殺連接、修改全局變量、複製控制 | 僅 DBA |
--protocol=compressed,增加竄改/竊聽難度require_secure_transport=ON 強制加密連接--ssl-mode=REQUIRED / DSN sslmode=verify-fullssh -L 3307:127.0.0.1:3306 user@db-host,本地連接 3307 實為遠程 3306,3306 不暴露公網Host 列**優先使用 IP/CIDR**(192.168.1.%、10.0.0.0/255.255.255.0)%.example.com 易遭 DNS 劫持)--skip-name-resolve 禁用反向 DNS 解析,提升連接速度、避免 DNS 故障導致無法連接default_authentication_plugin=caching_sha2_password(更強雜湊、支持 RSA 公鑰交換)password_require_current=ON 修改密碼需驗證舊密碼password_history=6 禁止重用近 6 次密碼password_reuse_interval=365 DAY 禁止 1 年內重用mandatory_roles 強制角色授予「強密碼、非 root 運行、最小權限、加密通信、IP 授權、現代插件」六大支柱,構建 MySQL 生產級安全基線。