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

MySQL 安全加固指南:密碼策略、以非 root 運行、權限最小化、通信加密、DNS 信任控制

     編輯:MySQL 資料庫相關知識

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),極度危險。

二、以專用非 root 系統用戶運行 mysqld


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

四、通信加密

  • 壓縮協議(MySQL 3.22+):--protocol=compressed,增加竄改/竊聽難度
  • SSL/TLS(5.7+ 默認生成自簽證書):
    服務端 require_secure_transport=ON 強制加密連接
    客戶端 --ssl-mode=REQUIRED / DSN sslmode=verify-full
  • SSH 隧道:ssh -L 3307:127.0.0.1:3306 user@db-host,本地連接 3307 實為遠程 3306,3306 不暴露公網

五、DNS 信任控制

  • 授權表 Host 列**優先使用 IP/CIDR**(192.168.1.%、10.0.0.0/255.255.255.0)
  • 若必須用主機名,**嚴禁通配符域名**(%.example.com 易遭 DNS 劫持)
  • --skip-name-resolve 禁用反向 DNS 解析,提升連接速度、避免 DNS 故障導致無法連接

六、現代版本額外加固(MySQL 8.0 / MariaDB 10.4+)

  • 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 生產級安全基線。

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