萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 安全加固 23 條軍規:從網絡加密到權限最小化的系統化防護清單

網絡與傳輸層防護

  1. 跨公網必須加密:SSH 隧道 ssh -L 3306:localhost:3306 user@db 或 SSL/TLS(配置 ssl-ca/cert/key)
  2. 禁用明文密碼傳輸:應用層使用 SHA256/bcrypt 存儲,MySQL 8.0+ 默認 caching_sha2_password
  3. 防火牆收攏 3306:nmap -p 3306 / telnet host 3306 驗證,僅放行應用服務器 IP
  4. 修改默認端口:port=33061 降低自動掃描噪音

認證與授權體系

  1. Root 禁用遠程登入:UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
  2. 匿名用戶清零:DROP USER ''@'%'; DROP USER ''@'localhost';
  3. 最小權限原則:業務賬號僅授予具體庫·表的 SELECT/INSERT/UPDATE/DELETE
  4. 拒絕通配符主機:% 僅用於受信內網段,生產庫具體到 IP
  5. 定期輪換密碼:ALTER USER 'app'@'%' IDENTIFIED BY 'NewPass!'; 配合密碼策略 validate_password

SQL 注入與輸入驗證

  1. 參數化查詢/預處理:PREPARE stmt FROM 'SELECT * FROM t WHERE id=?'; EXECUTE stmt USING @id;
  2. 輸入長度/類型/格式校驗:應用層攔截超長、非預期字符
  3. 轉義特殊字符:各語言驅動提供 escape_string/real_escape_string
  4. 動態 URL 編碼:%22(")、%23(#)、%27(')

文件系統與進程隔離

  1. 專用運行用戶:user=mysql,不可用 root 啟動
  2. datadir 權限 750:chown -R mysql:mysql /var/lib/mysql; chmod 750 /var/lib/mysql
  3. 禁用符號鏈接:--skip-symbolic-links 防止繞過目錄遍歷
  4. 禁用 LOCAL INFILE:--local-infile=0 防止 LOAD DATA LOCAL 讀取任意服務器文件

高危權限管控

  1. FILE 權限僅 DBA:防 LOAD DATA '/etc/passwd' 讀取系統文件
  2. PROCESS/SUPER 僅 DBA:SHOW PROCESSLIST 可見全實例 SQL 文本;SUPER 可殺連接、改全局變量、控制復制
  3. 連接數限制:max_user_connections=100 防單賬號佔滿連接池
  4. 資源控制:GRANT ... WITH MAX_QUERIES_PER_HOUR 1000 MAX_CONNECTIONS_PER_HOUR 50

審計與應急

  1. 啟用審計日志:audit_log 插件記錄所有連接/查詢/DDL
  2. 應急重置 Root 密碼:
    systemctl stop mysqld
    mysqld_safe --skip-grant-tables &
    mysql -u root
    UPDATE mysql.user SET authentication_string=PASSWORD('NewPass!') WHERE User='root';
    FLUSH PRIVILEGES;
    systemctl restart mysqld
    
  3. 定期滲透測試:SQLMap、自動化掃描驗證防線
copyright © 萬盛學電腦網 all rights reserved