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

MySQL 資安加固 23 條鐵律:為資料庫穿上防彈衣

     編輯:MySQL 資料庫相關知識

前言

資料庫是企業核心資產,MySQL 官方文件列出 23 項安全實務,涵蓋網路傳輸、帳號權限、作業系統層面與應用程式防禦。本文將其重新組織為六大面向,並補充現代最佳實務。

一、網路傳輸加密

  1. 跨非信任網路必須加密: 使用 SSH Tunnel 或 SSL/TLS 保護連線機密性與完整性(REQUIRE SSL)。
  2. 防火牆隔離: 3306 埠僅對信任 IP 開放,資料庫置於 DMZ 或內網,拒絕公開存取。
  3. 驗證連接埠暴露: nmap -p 3306 或 telnet host 3306 確認對外封鎖。

二、認證與密碼管理

  1. 禁止明文密碼: 應用端儲存雜湊(bcrypt/Argon2),MySQL 內部使用 SHA2 / caching_sha2_password 插件。
  2. 強制複雜密碼: 拒絕字典字、啟用 validate_password 元件設定長度、字元類型、過期週期。
  3. 定期輪換 root 密碼: 使用 SET PASSWORD / ALTER USER,配合 FLUSH PRIVILEGES。

三、最小權限原則

  1. 僅 root 可存取 mysql.user 表: 密碼雜湊外洩即意味著完整帳號接管。
  2. 應用程式使用專用帳號: 僅授予必要資料庫的 SELECT/INSERT/UPDATE/DELETE,嚴禁 GRANT OPTION、FILE、PROCESS、SUPER。
  3. 移除匿名帳號與測試資料庫: DROP USER ''@'%'; DROP DATABASE test;。

四、防禦 SQL Injection 與輸入驗證

  1. 參數化查詢 / Prepared Statement: 杜絕字串拼接 SQL。
  2. 輸入長度與型別驗證: 應用層與資料庫層雙重檢核。
  3. 各語言使用官方逃逸函式: PHP mysqli_real_escape_string、Java PreparedStatement、Python %s 佔位符等。

五、作業系統與檔案層面

  1. --skip-symbolic-links 禁用符號連結攻擊。
  2. 資料目錄擁有者限定為 mysql 使用者,權限 750 / 640。
  3. FILE 權限僅授予管理帳號,防 LOAD DATA INFILE '/etc/passwd' 攻擊。
  4. 不信任 DNS 時,host 欄位僅填 IP。

六、服務啟動參數與稽核

  1. --local-infile=0 關閉客戶端本地載入。
  2. --skip-show-database 隱藏資料庫列表。
  3. max_user_connections 限制單帳號連線數,防連線耗盡。
  4. 啟用 general_log / audit_log 記錄關鍵操作。
  5. 定期 tcpdump -i eth0 port 3306 | strings 檢查明文傳輸洩漏。

附錄:遺忘 root 密碼急救單

systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root mysql
UPDATE user SET authentication_string=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
systemctl restart mysqld

安全是持續過程而非一次性設定,建議將上述清單納入 CI/CD 檢核與定期滲透測試範圍。

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