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

MySQL 23 條資安軍規:從連線加密到權限審計的完整檢核清單

     編輯:MySQL 資料庫相關知識

網路傳輸與存取控制(第 1~5 條)

  1. 跨非信任網路必須加密:使用 SSH 隧道或 SSL/TLS 保護連線機密性。
  2. 密碼變更標準流程:
    mysql -u root
    UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
    FLUSH PRIVILEGES;
    
  3. 防禦威脅模型:側錄、竄改、重放、拒絕服務。採用 ACL(存取控制清單)管控所有連線、查詢、操作;可選啟用 SSL。
  4. 嚴禁非 root 存取 mysql.user 表:該表存放加密密碼,洩露即導致帳號被盜用。
  5. 使用 GRANT/REVOKE 管理權限:避免直接操作授權表,利用內建指令確保一致性。

密碼與認證強化(第 6~7 條)

  1. 禁用明文密碼:應用層儲存 MD5()、SHA1() 或更強雜湊(SHA2()、bcrypt)。
  2. 拒絕弱密碼:禁止字典單詞、生日、鍵盤排列;強制長度 ≥12、大小寫數字符號混合。

網路邊界防護(第 8~10 條)

  1. 防火牆隔離資料庫:DB 放置 DMZ 或內網,僅開放應用伺服器 IP 的 3306 埠。
  2. 驗證埠口對外關閉:nmap -p 3306 db_host 或 telnet db_host 3306 應失敗。
  3. 防禦 SQL Injection:參數化查詢、跳脫函數、輸入驗證、長度限制;URL 參數編碼(%22 %27 等)。

應用程式連線最佳實務(第 11~13 條)

  1. 檢查傳入資料大小:防止超大封包導致 DoS 或緩衝區溢位。
  2. 應用使用最低權限帳號:僅授予必要資料庫的 CRUD 權限,嚴禁 root/超級帳號。
  3. 各語言使用官方跳脫函數:PHP mysqli_real_escape_string、Java PreparedStatement、Python cursor.execute() 參數化等。網路傳輸強制 SSL/SSH。

稽核與進階防護(第 14~18 條)

  1. 學會 tcpdump/strings 審計流量:tcpdump -l -i eth0 -w - src or dst port 3306 | strings 檢查明文洩露。
  2. 禁用符號連結:啟動參數 --skip-symbolic-links 防止表檔案被連結至敏感路徑。
  3. 資料目錄權限鎖死:唯有啟動 mysqld 的系統帳號擁有讀寫權限(chown -R mysql:mysql /var/lib/mysql && chmod 750 /var/lib/mysql)。
  4. PROCESS/SUPER 僅限管理員:防止一般帳號窺探執行中 SQL 或殺連線、改參數。
  5. FILE 權限僅限管理員:阻止 LOAD DATA INFILE '/etc/passwd' 類攻擊。

主機名稱與連線數控制(第 19~21 條)

  1. 不信任 DNS 改用 IP 授權:授權表 Host 欄位填 IP,避免 DNS 劫持/詐騙。
  2. 限制單帳號最大連線數:設定 max_user_connections 防止單一帳號佔滿連線池。
  3. GRANT 支援資源限制:GRANT ... WITH MAX_QUERIES_PER_HOUR 1000 MAX_CONNECTIONS_PER_HOUR 50。

啟動參數與緊急恢復(第 22~23 條)

  1. 關鍵啟動參數:
    • --local-infile=0 禁用 LOAD DATA LOCAL INFILE。
    • --skip-show-databases 隱藏資料庫列表。
    • --skip-grant-tables 僅限緊急救援,修復後立即 FLUSH PRIVILEGES 重啟權限。
  2. Error 1045 密碼重置急救:
    # 1. 停止 mysqld,以 skip-grant-tables 啟動
    mysqld --skip-grant-tables &
    
    # 2. 免密登入修改密碼
    mysql -u root mysql
    UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
    FLUSH PRIVILEGES;
    
    # 3. 正常重啟 mysqld
    

總結

資安非一次性設定,而是持續程序:最小權限、加密傳輸、嚴格稽核、定期演練。將此 23 條納入部署清單與定期審核機制,大幅降低資安風險。

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