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

MySQL 安全防護 23 條鐵律:密碼、授權、網路、審計、參數配置全方位加固

     編輯:MySQL 資料庫相關知識

網路與傳輸安全

  1. 跨非信任網路連線必須用 SSH 隧道或 SSL 加密。
  2. 防火牆限制 3306 埠僅對應用伺服器開放,拒絕公網存取。
  3. 使用 nmap -p 3306 或 telnet host 3306 定期掃描驗證。

帳號與密碼管理

  1. 僅 root 可存取 mysql.user 表,其他帳號嚴禁。
  2. 密碼儲存使用單向雜湊(MySQL 內建 PASSWORD() / SHA2()),禁止明文。
  3. 密碼策略:長度≥12、大小寫數字特殊字元、定期輪換、禁用字典字。
  4. 應用程式使用最小權限帳號,禁止 root 直連業務。

授權與權限控制

  1. 使用 GRANT/REVOKE 精確授權至庫/表/欄位層級。
  2. 嚴禁授予 PROCESS/SUPER/FILE 權限給非管理帳號。
  3. FILE 權限可導致 LOAD DATA INFILE '/etc/passwd' 敏感檔案讀取。
  4. 啟用 --skip-show-databases 隱藏庫列表。

輸入驗證與注入防護

  1. 所有使用者輸入經參數化查詢(Prepared Statement)處理,拼接 SQL 絕對禁止。
  2. Web 表單對特殊字元(引號、分號、註解符)進行轉義或過濾。
  3. 動態 URL 參數嚴格型別驗證(數字、日期、列舉值)。
  4. 傳遞給 MySQL 前檢查資料長度、格式、範圍。

作業系統與檔案層面

  1. MySQL 進程以專用低權限帳號(mysql)啟動,禁止 root。
  2. 資料目錄 /var/lib/mysql 僅 mysql 帳號可讀寫(chown mysql:mysql、chmod 750)。
  3. 啟動參數 --skip-symbolic-links 禁用符號連結攻擊。
  4. DNS 不可信時,授權表 Host 欄位僅填 IP,不填主機名。

連線與資源限制

  1. 設定 max_user_connections 限制單帳號並發連線數。
  2. GRANT 支援 MAX_QUERIES_PER_HOUR、MAX_CONNECTIONS_PER_HOUR 等資源配額。
  3. 本地載入檔案控制:--local-infile=0 禁用 LOAD DATA LOCAL。

緊急修復

  1. 遭遇 ERROR 1045 Access denied:
    mysqld_safe --skip-grant-tables &
    mysql -u root mysql -e "UPDATE user SET authentication_string=PASSWORD('new') WHERE User='root'; FLUSH PRIVILEGES;"
    重啟服務生效。

審計與監控建議

  • 啟用 log_bin、slow_query_log、log-queries-not-using-indexes。
  • 定期審核 mysql.user、mysql.db、mysql.tables_priv 異常授權。
  • 部署審計外掛(MariaDB Audit Plugin、MySQL Enterprise Audit)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved