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

MySQL 資料庫安全強化 23 項實戰守則:從連線加密到權限最小化

     編輯:MySQL 資料庫相關知識

前言

資料庫安全不僅是設定密碼,涵蓋網路傳輸、存取控制、審計追蹤、參數調校等多層面。本文彙整 23 項生產環境驗證的 MySQL 安全最佳實踐,供 DBA 與開發人員參考。

網路與傳輸層防護

  1. 跨非信任網路必須加密:使用 SSH 隧道或 SSL/TLS 保護 3306 端口通訊,防竊聽與中間人攻擊。
  2. 防火牆限制存取來源:僅允許應用伺服器 IP 存取 3306,拒絕公網直連。可用 nmap -p 3306 或 telnet host 3306 驗證。
  3. 啟用 SSL 連線:編譯支援 OpenSSL 的 MySQL,配置 ssl-ca、ssl-cert、ssl-key,強制客戶端加密連線。

認證與密碼策略

  1. 所有帳號強制設密碼:禁止空密碼,定期輪換。
  2. 密碼儲存用單向雜湊:應用層以 SHA-256、bcrypt 或 Argon2 雜湊,資料庫內不存明文。
  3. 拒絕弱密碼:避免字典字、生日、預設密碼;啟用 validate_password 元件強制複雜度。
  4. root 帳號禁用遠端登入:GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'strong_pass';

權限最小化原則

  1. 應用程式使用專用低權限帳號:僅授予 SELECT, INSERT, UPDATE, DELETE 於特定庫/表。
  2. 嚴格控制 user 表存取:僅 root 可讀寫 mysql.user,防密碼雜湊外洩。
  3. 回收 PROCESS、SUPER、FILE 高危權限:非 DBA 帳號嚴禁授予。
  4. 使用 GRANT / REVOKE 精細授權:避免 GRANT ALL ON *.*。
  5. 啟用 max_user_connections 限制單帳號連線數:防單一帳號佔滿連線池。

SQL 注入與輸入驗證

  1. 所有動態查詢使用參數化/預處理語句:PDO、mysqli prepare()、JDBC PreparedStatement。
  2. 輸入長度、型別、格式嚴格驗證:拒絕超長、非預期字元。
  3. Web 表單/URL 參數轉義:單引號 %27、雙引號 %22、井號 %23 等編碼處理。

系統與審計強化

  1. 以非 root 系統用戶運行 mysqld:建立專用 mysql 用戶,chown -R mysql:mysql /var/lib/mysql。
  2. 禁用符號連結:啟動參數 --skip-symbolic-links,防目錄遍歷。
  3. 資料目錄權限收斂:僅 mysql 用戶可讀寫 /var/lib/mysql。
  4. DNS 信任風險規避:授權表僅用 IP 地址,避免主機名解析劫持。
  5. 關閉 SHOW DATABASES 全域顯示:啟動參數 --skip-show-databases。
  6. 審計關鍵操作:啟用 audit_log 或 MariaDB Audit Plugin 記錄 DDL/DML。

緊急恢復:Error 1045 密碼重設標準流程

# 1. 停止服務
systemctl stop mysqld
# 2. 跳過權限表啟動
mysqld_safe --skip-grant-tables &
# 3. 無密碼登入重設
mysql -u root mysql -e "UPDATE user SET Password=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;"
# 4. 正常重啟
systemctl restart mysqld

結語

安全是持續過程而非一次性配置。建議將上述 23 項納入部署清單、定期巡檢、自動化合規掃描,構建纵深防禦體系。

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