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

MySQL 安全防禦體系:從連線加密、密碼策略到最小權限與審計的 20 條鐵律

     編輯:MySQL 資料庫相關知識

傳輸層加密

  1. 跨非信任網路必須加密:SSH 隧道或 SSL/TLS,防竊聽、中間人
  2. 啟用壓縮協議:mysql --compress 或連接字串 useCompression=true,增加解密難度
  3. 驗證 SSL 啟用:SHOW VARIABLES LIKE '%ssl%',確認 have_ssl=YES

認證與密碼治理

  1. 全帳號強制密碼:禁用空密碼,validate_password 強制複雜度
  2. 密碼定期輪換:ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY (8.0+)
  3. 應用層單向雜湊:bcrypt/Argon2/SHA-256,資料庫不存明文
  4. root 僅本地登入:GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'strong';

最小權限模型

  1. 應用專用帳號、庫表級授權:GRANT SELECT,INSERT,UPDATE,DELETE ON db.* TO 'app'@'app_server_ip'
  2. 系統表隔離:mysql.user 僅 root 可讀寫
  3. 高危權限回收:FILE、PROCESS、SUPER、SHUTDOWN、RELOAD 僅 DBA
  4. 連線數限制:max_user_connections、GRANT ... WITH MAX_CONNECTIONS_PER_HOUR

SQL 注入與輸入防護

  1. 全量參數化查詢:PDO/PreparedStatement,拒絕字串拼接
  2. 輸入長度、型別、格式白名單驗證
  3. 錯誤訊息不外露:生產關閉 display_errors,日誌記錄詳細錯誤

系統與審計加固

  1. 專用系統用戶運行 mysqld:user=mysql,chown -R mysql:mysql /var/lib/mysql
  2. 禁用符號連結:--skip-symbolic-links
  3. 資料目錄權限收斂:700 / 750,僅 mysql 用戶可讀寫
  4. DNS 風險規避:授權表僅用 IP,避免主機名劫持
  5. 關閉 SHOW DATABASES 全域:--skip-show-databases
  6. 啟用審計日誌:audit_log / MariaDB Audit Plugin,記錄 DDL/DML/登入/失敗

緊急處置:Error 1045 密碼重置標準流程

systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -u root mysql -e "UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;"
systemctl restart mysqld

結語

安全是纵深防禦,而非單點配置。將上述 20 條納入基線模板、自動化巡檢、CI/CD 門禁、定期滲透測試,才能構建可信賴的 MySQL 安全體系。

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