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

MySQL 資料庫安全加固 23 條鐵律:從網路傳輸到權限最小化

     編輯:MySQL 資料庫相關知識

網路與傳輸層防護

  1. 加密傳輸:跨非信任網路必須用 SSH Tunnel 或 SSL/TLS 加密連線。
  2. 防火牆隔離:資料庫放在 DMZ 或內網,禁止 3306 埠直接暴露公網。用 nmap -p 3306、telnet host 3306 驗證封鎖生效。
  3. 僅綁定內網 IP:bind-address=10.0.0.10,拒絕公網介面監聽。

認證與密碼策略

  1. 移除匿名帳號:DELETE FROM mysql.user WHERE user='';
  2. Root 遠程登入禁用:UPDATE mysql.user SET host='localhost' WHERE user='root'; FLUSH PRIVILEGES;
  3. 強制複雜密碼:啟用 validate_password 插件,設定長度、大小寫、數字、特殊字元要求。
  4. 定期輪換密碼:ALTER USER 'app'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
  5. 不使用明文密碼:應用端用環境變數/密碼管理器,避免寫在設定檔。

權限最小化原則

  1. 應用帳號僅授必要權限:GRANT SELECT, INSERT, UPDATE ON db.* TO 'app'@'app_server_ip';
  2. 禁止 FILE、PROCESS、SUPER、SHUTDOWN 給非管理帳號。
  3. 資料庫/表/欄位級精細授權:敏感欄位 (薪資、身分證) 僅授 SELECT (col1, col2)。
  4. 移除 test 資料庫存取權:REVOKE ALL ON test.* FROM '%';

SQL 注入防禦

  1. 參數化查詢 / Prepared Statements:所有語言驅動皆支援,杜絕字串拼接。
  2. 輸入驗證與長度限制:WHERE id=? + 伺服端檢查 id > 0 AND id < 1000000。
  3. ORM/查詢建構器:自動處理跳脫字元。

伺服器硬化配置

  1. --skip-symbolic-links:禁用符號連結攻擊。
  2. --local-infile=0:禁用 LOAD DATA LOCAL INFILE 防止任意檔案讀取。
  3. --skip-show-database:隱藏資料庫列表。
  4. 資料目錄權限:chown -R mysql:mysql /var/lib/mysql; chmod 750 /var/lib/mysql。
  5. 以專用低權限帳號 (mysql) 啟動服務,絕不使用 root。

審計與監控

  1. 啟用 General Log / Audit Plugin 記錄所有連線與 DDL/DML。
  2. 定期 tcpdump -i eth0 port 3306 -w - | strings 檢查是否有明文密碼/敏感資料外洩。
  3. 異常連線、失敗登入、權限變更設定告警。

緊急情況:ERROR 1045 重置 Root 密碼

systemctl stop mysqld
mysqld_safe --skip-grant-tables &
mysql -u root mysql
UPDATE user SET authentication_string=PASSWORD('NewPass123!') WHERE user='root';
FLUSH PRIVILEGES;
systemctl restart mysqld
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved