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

有效防範 MySQL 資料庫被破解:安全配置 10 大守則

     編輯:MySQL 資料庫相關知識

傳輸層加密

  • 啟用 SSL/TLS:配置 ssl-ca、ssl-cert、ssl-key,強制加密連線
  • SSH 隧道:跨不可信網路連線時,建立 SSH Tunnel 轉發 3306 埠
  • 壓縮協議:--compress 參數可減少流量並增加破解難度(MySQL 3.22+)

帳號與認證管理

守則執行方式
1. 所有用戶設強密碼ALTER USER 'user'@'host' IDENTIFIED BY 'StrongP@ssw0rd!';
2. 移除匿名用戶DROP USER ''@'localhost'; DROP USER ''@'%';
3. 禁止 root 遠端登入DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;
4. 密碼用單向雜湊MySQL 內建 PASSWORD() / SHA2(),應用層用 bcrypt/Argon2
5. 避免字典弱密碼啟用 validate_password 元件強制複雜度

權限最小化原則

  • 應用帳號僅授予必要資料庫、必要操作:GRANT SELECT,INSERT,UPDATE ON app_db.* TO 'app_user'@'app_server_ip';
  • 嚴禁授予 FILE、PROCESS、SUPER、SHUTDOWN 權限給非管理帳號
  • FILE 權限可讀寫伺服器檔案系統(如 LOAD DATA INFILE '/etc/passwd')
  • PROCESS 可見 SHOW PROCESSLIST 所有查詢文本(含敏感 SQL)
  • SUPER 可切斷連線、修改全域變數、控制複寫

網路與存取控制

  • 防火牆封鎖 3306 埠:僅允許應用伺服器 IP 存取
  • bind-address = 127.0.0.1(僅本機)或指定內網 IP
  • skip-name-resolve:停用 DNS 反向解析,加速連線並避免 DNS 攻擊
  • 授權表僅用 IP 地址,不使用主機名(避免 DNS 欺騙)

資料庫層面防護

  • 啟用一般查詢日誌 / 慢查詢日誌 / 錯誤日誌,定期審計
  • max_user_connections 限制單帳號最大連線數,防禦連線耗盡
  • --skip-show-database:隱藏 SHOW DATABASES 結果
  • --local-infile=0:禁止 LOAD DATA LOCAL INFILE 客戶端讀取本地檔案

作業系統層面

  • 以專用低權限帳號(如 mysql 用戶)運行 mysqld,絕不使用 root
  • 資料目錄 /var/lib/mysql 僅 mysql 用戶可讀寫
  • 啟動腳本 mysql.server 僅 root 可寫

緊急情況:重置 root 密碼(含安全模式)

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過權限啟動
mysqld_safe --skip-grant-tables --skip-networking &  # 關鍵:同時禁用網路

# 3. 本機修改密碼
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd!';
FLUSH PRIVILEGES;

# 4. 正常重啟
systemctl restart mysqld
🔒 安全審計清單(每季執行):
  1. SELECT User, Host, authentication_string FROM mysql.user; 檢查弱密碼/匿名帳號
  2. SHOW GRANTS FOR 'app_user'@'%'; 核對權限最小化
  3. netstat -tlnp | grep 3306 確認綁定位址
  4. grep -i error /var/log/mysql/error.log 檢視異常
  5. 備份驗證:定期測試還原可用性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved