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

MySQL 資料庫安全強化 23 項實務守則

     編輯:MySQL 資料庫相關知識

前言

MySQL 作為廣泛部署的開源資料庫,其安全性直接關係業務資料的機密性、完整性與可用性。本文整理 23 項實務守則,涵蓋網路傳輸、帳號權限、應用防禦、伺服器設定等面向,協助 DBA 與開發人員建立纵深防禦體系。

網路與傳輸層防護

  1. 加密通訊通道:跨越不可信網路時,必須使用 SSH 隧道或 SSL/TLS 加密 Client-Server 連線,防止竊聽與竄改。
  2. 防火牆隔離:資料庫伺服器應置於防火牆後方或 DMZ 區域,封鎖來自非信任網路對 TCP 3306 埠的直接存取。可用 nmap 或 telnet 驗證埠口暴露狀態。
  3. 拒絕明文傳輸:所有連線、查詢、管理操作均應走加密通道;生產環境嚴禁明文傳輸帳密或敏感資料。

帳號與權限最小化

  1. 根帳號隔離:除 root 外,任何帳號不得存取 mysql.user 系統表,防止密碼雜湊外洩導致橫向移動。
  2. 最小權限原則:應用程式連線帳號僅授予必要權限(SELECT/INSERT/UPDATE/DELETE),嚴禁授予 PROCESS、SUPER、FILE 等高危權限。
  3. 資源限額:善用 max_user_connections 限制單一帳號連線數,搭配 GRANT 的 MAX_QUERIES_PER_HOUR 等資源控制選項,防止濫用導致拒絕服務。
  4. 密碼策略:禁止字典弱密碼;儲存時使用 SHA2()、bcrypt 等強雜湊(舊版可用 PASSWORD() 但不建議),並定期輪換。

應用層防禦:SQL 注入與輸入驗證

  1. 參數化查詢:所有動態 SQL 必須使用預處理語句或驅動程式提供的參數綁定,嚴禁字串拼接。
  2. 輸入長度與型別檢查:在資料送入 MySQL 前,於應用層驗證長度、格式、型別,攔截異常大或惡意構造的載荷。
  3. 跳脫字元處理:若無法使用參數化,必須呼叫各語言驅動的官方跳脫函式(如 PHP mysqli_real_escape_string、Java PreparedStatement),並針對單雙引號、井號、反斜線等特殊字元編碼。

伺服器與作業系統加固

  1. 專用低權限帳號啟動:mysqld 必須以專屬非 root 系統帳號運行,資料目錄僅授予該帳號讀寫權限。
  2. 停用符號連結:啟動參數加入 --skip-symbolic-links,防止透過符號連結繞過目錄限制讀寫任意檔案。
  3. 本地載入限制:若不需 LOAD DATA LOCAL INFILE,設定 --local-infile=0 關閉客戶端本地檔案匯入功能。
  4. DNS 信任控制:若不信任 DNS 解析,host 欄位僅允許 IP 位址或 CIDR 區段,避免主機名偽造。
  5. 審計與監控:啟用慢查詢日誌(long_query_time)、一般查詢日誌或審計外掛(如 MariaDB Audit Plugin),定期分析異常存取模式。
  6. 錯誤訊息最小化:生產環境關閉詳細錯誤回顯,避免洩露資料表結構、版本資訊等偵察線索。

緊急應變:Root 密碼遺失重置流程

  1. 停止 MySQL 服務。
  2. 以 --skip-grant-tables --skip-networking 啟動實例(僅本地連線、跳過權限檢查)。
  3. 免密登入:mysql -u root。
  4. 更新密碼:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!'; FLUSH PRIVILEGES;(MySQL 5.7+ 語法)。
  5. 正常重啟服務並驗證新密碼。

總結

資料庫安全非單一設定可完備,需結合網路隔離、最小權限、參數化查詢、加密傳輸、審計監控、定期滲透測試等多層面持續經營。建議將上述 23 項納入上線核查清單,並隨版本升級、架構變更同步檢視調整。

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