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

MySQL 安全加固 23 條軍規:從網絡傳輸、賬號權限、密碼策略、防火牆到注入防範的全方位防護手冊

     編輯:MySQL 資料庫相關知識

網絡傳輸安全

  1. 跨不可信網絡必用 SSH 隧道或 SSL:加密連接防竊聽/篡改/重放。
  2. 禁用明文密碼傳輸:驅動層啟用 SSL,REQUIRE SSL 強制賬號走加密通道。

賬號與權限最小化

  1. 修改密碼標準流程:mysql -u root → UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE user='root'; → FLUSH PRIVILEGES;(5.7+ 用 authentication_string)。
  2. 非 root 禁止訪問 mysql.user 表:該表存儲密碼哈希,洩露即全庫失陷。
  3. 用 GRANT/REVOKE 管理權限,避免直接操作權限表。
  4. 應用賬號最小權限:僅授業務所需 SELECT/INSERT/UPDATE/DELETE,特定庫表,拒絕 DROP/ALTER/GRANT。
  5. 嚴格控制 SUPER/PROCESS/FILE/SHUTDOWN:僅 DBA 持有,防止殺查詢、讀文件、關庫。

密碼策略與認證

  1. 不使用字典弱密碼,強制複雜度(長度、大小寫、數字、特殊字符)。
  2. 密碼哈希存儲:MySQL 內部用 SHA1 雙重哈希,應用層勿自行 MD5/SHA1 再存(雙重哈希無增益)。
  3. 啟用 validate_password 插件(5.7+ 默認):強制密碼策略、過期輪換。

網絡邊界防護

  1. 防火牆/安全組僅放行應用服務器 IP 訪問 3306,拒絕 0.0.0.0/0。
  2. 數據庫放 DMZ 或內網專用段,不直接暴露公網。
  3. 掃描驗證:nmap -p 3306 host、telnet host 3306 確認端口不可達。

SQL 注入防範

  1. 參數化查詢/預編譯語句:所有語言驅動均支持,徹底隔離代碼與數據。
  2. 輸入長度/類型/格式校驗:白名單驗證,拒絕超長/異常字符。
  3. 動態 SQL 拼接時轉義:驅動提供 escape_string/real_escape_string,或框架 ORM 自動處理。
  4. URL 參數編碼:%22(", %23#、%27' 防繞過。

文件系統與進程隔離

  1. 以專用低權限用戶運行 mysqld(mysql 用戶),禁止 root 運行。
  2. 數據目錄權限 750,屬主 mysql:mysql,僅運行用戶可讀寫。
  3. 禁用符號鏈接:--skip-symbolic-links 防止繞過目錄限制。
  4. local-infile 控制:--local-infile=0 禁用 LOAD DATA LOCAL 防任意文件讀取。

審計與監控

  1. 啟用審計日誌插件:記錄登入、DDL、DML、失敗嘗試。
  2. 監控異常連接/失敗登入/慢查詢/權限變更,接入 SIEM 告警。
  3. 定期輪換密碼、審計賬號權限、清理無用賬號。

緊急密碼重置(錯誤 1045)


# 1. 跳過權限表啟動
mysqld --skip-grant-tables --skip-networking &
# 2. 免密登入
mysql -u root mysql
# 3. 更新密碼
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
# 4. 正常重啟
mysqladmin shutdown
systemctl start mysqld
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved