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

MySQL 安全硬化指南:從連線加密到權限最小化的 12 項鐵律

     編輯:MySQL 資料庫相關知識

連線層防護

  • 強制密碼:所有帳號必須設定強密碼,禁止空密碼
  • 加密傳輸:MySQL 4.1.1+ 支援 SSL/TLS;不可信網路必須啟用 SSH 隧道或 MySQL 原生 SSL
  • 壓縮協議:啟用 --compress 增加竊聽難度(非加密替代品)

帳號與權限鐵律

  1. 禁止 root 遠端登入:UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
  2. 專用帳號:應用、備份、監控、開發各用獨立帳號,最小權限
  3. 移除匿名帳號:DROP USER ''@'%'; DROP USER ''@'localhost';
  4. 限制 SUPER/PROCESS/FILE:僅 DBA 持有,防止查詢竊取、檔案讀寫濫用
  5. 禁用符號連結:--skip-symbolic-links 防止任意檔案讀寫
  6. 資料目錄權限:僅 mysqld 執行身分可讀寫 datadir
  7. DNS 信任風險:授權表使用 IP 而非主機名,謹慎使用通配符
  8. 連線數限制:max_user_connections 防止單帳號佔滿連線池

作業系統層面

  • 以非 root 使用者(如 mysql)啟動 mysqld,my.cnf 設定 user=mysql
  • 防火牆僅開放 3306 至應用伺服器 IP
  • 啟用 audit_log 元件記錄關鍵操作

密碼管理現代化(MySQL 5.7+)

-- 使用 caching_sha2_password(預設)
ALTER USER 'app'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 密碼過期策略
ALTER USER 'app'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;

-- 密碼歷史與重複使用限制
ALTER USER 'app'@'%' PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;

緊急修復:Root 密碼遺失

# 1. 停止服務
systemctl stop mysqld

# 2. 跳過授權表啟動
mysqld_safe --skip-grant-tables &

# 3. 免密登入重設
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('NewPwd') WHERE User='root';
FLUSH PRIVILEGES;

# 4. 正常重啟
systemctl restart mysqld
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved