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

MySQL 新手必知的 23 條安全鐵律:從連線加密到權限最小化

     編輯:MySQL 資料庫相關知識

前言

資料庫安全非一日之功,而是纏繞在架構設計、開發規範、維運流程每個環節。本文整理 23 條實戰經驗,涵蓋網路傳輸、認證授權、注入防範、稽核監控四大面向,助你建立纵深防禦體系。

一、網路傳輸與存取控制

  1. 跨非信任網路必須加密: 使用 SSH Tunnel 或 SSL/TLS 加密 Client-Server 通訊,防止竊聽與竄改。
  2. 修改 root 密碼標準流程:
    mysql -u root
    UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';
    FLUSH PRIVILEGES;
  3. 防禦四大攻擊面: 竊聽、竄改、重放、拒絕服務。善用 ACL(存取控制清單)與 SSL 連線。
  4. 嚴禁非 root 存取 mysql.user 表: 該表儲存雜湊密碼,洩露即意味著帳號被接管。
  5. 善用 GRANT/REVOKE 精細授權: 拒絕使用萬用字元 GRANT ALL ON *.*,按庫、表、欄位最小權限授予。
  6. 拒絕明文密碼: 應用層儲存 MD5()、SHA1() 或更強的 SHA2()、bcrypt 雜湊值。
  7. 密碼複雜度策略: 禁用字典詞、啟用長度≥12、大小寫數字符號混合、定期輪換。
  8. 防火牆隔離: 資料庫置於 DMZ 或內網,僅開放應用伺服器 IP 存取 3306 埠;以 nmap -p 3306 或 telnet host 3306 定期掃描驗證。

二、SQL 注入與輸入驗證

  1. 參數化查詢 / 預處理語句: 永不拼接 SQL 字串;PHP 使用 PDO::prepare()、Java 使用 PreparedStatement。
  2. 輸入長度與型別檢查: 伺服端二次驗證,拒絕超長或非預期型別資料。
  3. 應用程式使用低權限帳號: 僅授予 SELECT/INSERT/UPDATE/DELETE 於特定庫,拒絕 DROP/ALTER/GRANT。
  4. 各語言驅動必須呼叫逃逸函式: PHP mysqli_real_escape_string()、Python cursor.execute() 參數化等。

三、伺服器硬化與稽核

  1. 流量稽核: tcpdump -l -i eth0 -w - src or dst port 3306 | strings 偵測明文敏感資料外洩。
  2. 以普通用戶啟動 mysqld: 禁止 root 執行資料庫進程。
  3. 停用符號連結: 啟動參數 --skip-symbolic-links 防止任意檔案讀取。
  4. 目錄權限收斂: 僅啟動用戶可讀寫 MySQL 安裝與資料目錄。
  5. 嚴控 PROCESS/SUPER 權限: 非管理帳號不可擁有,否則可窺探查詢文本、殺掉連線、變更全域變數、控制複寫。
  6. FILE 權限僅限管理員: 防止 LOAD DATA INFILE '/etc/passwd' 讀取系統檔案。
  7. 不信任 DNS 時改用 IP 白名單: GRANT ... TO 'user'@'192.168.1.%'。
  8. 限制單帳號最大連線數: max_user_connections 防止單一應用耗盡連線池。
  9. GRANT 支援資源限制: MAX_QUERIES_PER_HOUR、MAX_UPDATES_PER_HOUR、MAX_CONNECTIONS_PER_HOUR、MAX_USER_CONNECTIONS。

四、啟動參數與進階防護

  1. 關鍵啟動開關:
    • --local-infile=0 禁用 LOAD DATA LOCAL
    • --skip-grant-tables 僅限緊急救援,啟用後必須 FLUSH PRIVILEGES 重新載入權限
    • --skip-show-databases 隱藏資料庫列表資訊
  2. 遺忘 root 密碼救援流程:
    1. killall mysqld
    2. mysqld_safe --skip-grant-tables &
    3. mysql -u root
    4. UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;
    5. 正常重啟 mysqld

結語

安全是系統工程,而非單一設定。將這 23 條鐵律納入開發規範、Code Review 清單、上線核對表、定期滲透測試,才能構建真正可信賴的 MySQL 環境。

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