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

MySQL 安全強化指南:從網絡加密到權限最小化的 10 大防禦策略

     編輯:MySQL 資料庫相關知識

MySQL 資料庫安全防護體系:核心原則與實戰配置

MySQL 預設傳輸不加密(密碼除外),若不加固配置,極易遭受竊聽、提權、資料洩露等攻擊。本文系統梳理從網絡層到權限層的 10 大防禦策略。

網絡傳輸安全

帳號與認證強化

1. 強制所有帳號設定密碼

-- 修改 root 密碼範例
mysql -u root mysql
UPDATE user SET Password=PASSWORD('strong_password') WHERE user='root';
FLUSH PRIVILEGES;

風險: 空密碼帳號允許任意用戶名登入(mysql -u any_user db_name)。

2. 禁止以系統 root 運行 mysqld

  • 建立專用 mysql 系統用戶:useradd -r -s /bin/false mysql
  • 啟動腳本使用 su - mysql -c "mysqld" 或 systemd 服務配置 User=mysql
  • MySQL 內部 root ≠ 系統 root,兩者無關聯

3. 保護啟動腳本與配置文件

  • mysql.server 若含系統 root 密碼,權限設為 600(僅 root 可讀)
  • 數據目錄擁有者為 mysql 用戶,權限 750(組可讀,其他無權限)

權限最小化原則

層級方案適用版本說明
壓縮協議啟用壓縮MySQL 3.22+增加竊聽難度,非加密
隧道加密SSH 隧道所有版本客戶端-服務端建立加密 TCP 通道,推薦跨公網場景
原生 SSL/TLS配置 SSL 憑證MySQL 4.0+原生加密連線,需憑證管理

關鍵配置參數(my.cnf)

[mysqld]
# 禁用本地資料載入(防止任意文件讀取)
local-infile=0

# 禁用符號連結(防止目錄遍歷)
skip-symbolic-links

# 限制單用戶最大連接數
max_user_connections=50

# 禁用 SHOW DATABASES(資訊洩露防護)
skip-show-database

# 僅綁定內網 IP(拒絕公網直連)
bind-address=192.168.1.100

# 啟用 SSL
ssl-ca=/etc/mysql/ca.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

DNS 與主機名安全

  • 授權表優先使用 IP 地址 而非主機名
  • 嚴禁使用 % 通配主機名(如 user@'%')
  • 啟動參數 --skip-name-resolve 禁用 DNS 解析,提升連線速度並避免 DNS 劫持風險

緊急修復:root 密碼遺失/鎖定

# 1. 跳過授權表啟動
mysqld_safe --skip-grant-tables &

# 2. 無密碼登入重置
mysql -u root mysql
UPDATE user SET Password=PASSWORD('new_pass') WHERE user='root';
FLUSH PRIVILEGES;

# 3. 正常重啟服務
mysqladmin shutdown
systemctl start mysqld

安全審計清單

  1. 定期執行 mysql_secure_installation 互動式加固
  2. 審計 mysql.user 表:無空密碼、無匿名帳號、無通配主機名
  3. 檢查 information_schema.processlist 異常長連線
  4. 啟用審計日志插件(Enterprise 版)或通用日志(開源版)
  5. 定期輪換應用帳號密碼,撤銷離職人員權限
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
權限風險建議授予對象
PROCESS可見所有查詢文本(含敏感 SQL)僅 DBA 管理帳號
FILE可讀寫服務器文件系統(含 /etc/passwd)極少數 ETL/備份帳號
SHUTDOWN可關閉資料庫服務僅自動化運維帳號
GRANT可將自身權限轉授他人極謹慎授予