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

MySQL 資安防護指南:從連線加密到權限最小化的完整實務

     編輯:MySQL 資料庫相關知識

連線傳輸加密

  • 預設密碼不以明文傳輸,但其他資訊為明文。跨不可信網路時,必須使用 SSH 隧道 或啟用 SSL 加密連線。
  • MySQL 3.22+ 支援壓縮協定增加破解難度,但 SSH 才是標準做法。

帳號與密碼管理鐵律

  1. 所有帳號必須設密碼:空密碼帳號允許任意連線(mysql -u other_user db_name)。
  2. Root 密碼立即修改:
    mysql -u root mysql
    UPDATE user SET Password=PASSWORD('new_pass') WHERE user='root';
    FLUSH PRIVILEGES;
    
  3. 禁止以 Unix root 執行 mysqld:建立專用 mysql 系統帳號,修改啟動腳本以 su - mysql 執行。
  4. 密碼儲存最佳實務:應用程式設定檔勿存明文密碼;若必須存,檔案權限設 0600 並置於非公開目錄。

權限最小化原則

高風險權限風險說明建議
FILE可讀寫伺服器任意檔案(如 /etc/passwd)僅授予管理員
PROCESS可見所有連線執行中的 SQL(含敏感 UPDATE)僅授予管理員
SUPER可殺連線、改參數、控制複寫僅授予管理員
GRANT可將自己的權限轉授他人嚴格限制

應用程式連線帳號:僅授予必要資料庫的 SELECT/INSERT/UPDATE/DELETE。

網路層防護

  • 防火牆封鎖 3306 埠對非信任網路開放;僅允許應用伺服器 IP 存取。
  • 驗證方式:nmap -p 3306 host 或 telnet host 3306 應連線失敗。
  • my.cnf 設定 bind-address=127.0.0.1 限制僅本機連線(若無遠端需求)。
  • 啟動參數 --skip-networking 完全關閉 TCP/IP,強制走 Unix Socket。

防範 SQL Injection

  • 所有程式介面(PHP/Perl/Java/JDBC...)必須使用參數化查詢或官方跳脫函數(如 mysqli_real_escape_string)。
  • Web 表單輸入嚴格驗證長度、型別、格式;動態 URL 參數編碼(%22 %27 等)。
  • 勿直接拼接未檢查的使用者輸入至 SQL。

稽核與監控

  • 啟用一般查詢日誌(general_log=1),記錄所有連線與查詢。
  • 定期審核日誌,偵測異常存取模式(大量失敗登入、非常態時間查詢、敏感表操作)。
  • 工具輔助:tcpdump -l -i eth0 -w - src or dst port 3306 | strings 檢查網路傳輸是否有明文敏感資料。

DNS 與主機名稱風險

不信任 DNS 時,授權表僅使用 IP 地址;謹慎使用萬用字元主機名(%、%.domain.com)。

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