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

MySQL 數據安全「二十三條軍規」:從加密傳輸到權限最小化全維度防護

     編輯:MySQL 資料庫相關知識

MySQL 官方提煉的 23 條安全準則,構建起從網絡傳輸、認證授權、審計監控到應用層防注入的立體防護體系。本文按防護層次重新編組,並補充現代最佳實踐。

第一層:網絡與傳輸安全

  1. 加密通信通道:跨不可信網絡連接必須使用 SSH 隧道或 SSL/TLS 加密傳輸(現代建議強制 TLS 1.2+)。
  2. 端口隔離防掃描:防火牆/路由器封鎖非信任網絡訪問 3306 端口(nmap -p 3306/telnet host 3306 驗證)。數據庫置於 DMZ 或防火牆後方。
  3. 拒絕明文傳輸:網絡層面禁用明文協議,全鏈路加密。

第二層:認證與授權鐵律

  1. root 專用原則:除 root 外嚴禁任何用戶訪問 mysql.user 表(密碼哈希洩露即意味著完全接管)。
  2. 強密碼策略:使用 SHA2()/PBKDF2 存儲(舊版 MD5()/SHA1()),拒絕字典弱密碼,定期輪換。
  3. 最小權限授權:應用賬號僅授予必要權限(GRANT SELECT,INSERT ON db.* TO app@host),禁用 GRANT ALL。
  4. 高危權限隔離:PROCESS/SUPER/FILE/SHUTDOWN 僅限管理員,防止 LOAD DATA INFILE '/etc/passwd' 類攻擊。
  5. 連接數限制:設置 max_user_connections 防單賬號耗盡連接資源。
  6. 資源限制:GRANT 支持 MAX_QUERIES_PER_HOUR 等資源控制選項。

第三層:應用層防注入鋼印

  1. 參數化查詢/預編譯:所有編程接口(C/C++/PHP/Java/Perl/Python)強制使用預編譯語句,徹底杜絕拼接 SQL。
  2. 輸入驗證與轉義:Web 表單雙引號轉義('')、動態 URL 編碼(%22/%27),長度校驗,類型白名單校驗。
  3. ORM/查詢構建器:優先使用成熟框架內置防注入機制,避免手寫 SQL。

第四層:系統加固與審計

  1. 文件系統權限收斂:MySQL 數據目錄僅屬主可讀寫(chown -R mysql:mysql /var/lib/mysql、chmod 750)。
  2. 禁用符號鏈接:啟動參數 --skip-symbolic-links 防止目錄遍歷攻擊。
  3. DNS 風險規避:主機授權表僅使用 IP 地址,不依賴 DNS 解析。
  4. 審計日志分析:使用 tcpdump -i eth0 port 3306 | strings 檢測明文傳輸,定期審計 general_log/audit_log。
  5. 以最小權限用戶運行 mysqld:嚴禁 root 啟動數據庫進程。

第五層:啟動參數安全開關

  1. --local-infile=0 禁用客戶端 LOAD DATA LOCAL
  2. --skip-show-databases 隱藏庫列表
  3. --skip-grant-tables 僅限緊急救援使用,修復後立即 FLUSH PRIVILEGES 恢復授權

第六層:緊急密碼重置流程

遇到 ERROR 1045 Access denied for root:

  1. mysqld --skip-grant-tables & 跳過授權啟動
  2. mysql -u root mysql 免密登錄
  3. UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root'; FLUSH PRIVILEGES;
  4. 重啟 MySQL 服務恢復正常授權模式

現代補充建議(MySQL 8.0+)

  • 啟用 caching_sha2_password 插件替代 mysql_native_password
  • 配置 require_secure_transport=ON 強制 SSL
  • 部署 MySQL Enterprise Audit 或開源 MariaDB Audit Plugin
  • 實施數據庫防火牆(如 ProxySQL 規則攔截)
  • 定期運行 mysql_secure_installation 基線檢查
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved