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

MySQL 安全強化 23 條鐵律:從權限控制到防注入全方位防護

     編輯:MySQL 資料庫相關知識

網路與傳輸層防護

  1. 加密傳輸: 跨不可信網路連線必須使用 SSH 隧道或 SSL 加密。
  2. 防火牆隔離: 資料庫置於防火牆後或 DMZ 區,禁止非信任網路直連 3306 埠(nmap -p 3306 / telnet host 3306 驗證)。
  3. 啟用 SSL/SSH: 生產環境強制加密連線,拒絕明文傳輸。

帳號與認證管理

  1. Root 專用: 僅 root 可訪問 mysql.user 表,密碼雜湊一旦洩露等同帳號失竊。
  2. 最小權限原則: 應用使用普通帳號,僅授必要權限;GRANT/REVOKE 精細控制。
  3. 強密碼策略: 禁用字典字、預設密碼;採用 MD5()/SHA1() 雜湊儲存(注意:MySQL 內部已用雜湊,應用層勿再雜湊)。
  4. 密碼定期輪換: SET PASSWORD FOR 'user'@'host' = PASSWORD('newpwd'); FLUSH PRIVILEGES;

SQL 注入防禦

  1. 參數化查詢/預處理語句: 各語言驅動均支援(PDO, mysqli, JDBC 等),徹底隔離代碼與數據。
  2. 輸入驗證與長度限制: 伺服端檢查型別、長度、格式,拒絕超長輸入。
  3. 轉義特殊字元: 必須拼接 SQL 時,使用驅動提供的轉義函數(mysqli_real_escape_string, PDO::quote 等)。
  4. URL 參數編碼: 動態 URL 中雙引號 %22、單引號 %27、井號 %23 等預編碼。

系統與檔案層面

  1. 以普通用戶啟動 mysqld: 禁止 root 啟動,限制進程權限。
  2. 禁用符號連結: 啟動參數 --skip-symbolic-links 防止任意檔案讀取。
  3. 目錄權限收斂: MySQL 數據目錄僅啟動用戶可讀寫(chown -R mysql:mysql /var/lib/mysql; chmod 700 /var/lib/mysql)。
  4. 管控高危權限:
    • PROCESS/SUPER 僅授 DBA,防止查看敏感 SQL、修改全域變數、控制複制。
    • FILE 僅授管理員,防 LOAD DATA INFILE '/etc/passwd' 讀取系統檔。
  5. IP 白名單代替 DNS: 不信任 DNS 時,mysql.user 僅填 IP 地址。

連線與資源限制

  1. 限制單帳號最大連線數: max_user_connections 變數或 GRANT ... WITH MAX_CONNECTIONS_PER_HOUR。
  2. 資源控制: GRANT 支援 MAX_QUERIES_PER_HOUR, MAX_UPDATES_PER_HOUR 等配額。

啟動參數安全開關

  1. --local-infile=0: 禁用 LOAD DATA LOCAL 防止客戶端讀取本地檔案上傳。
  2. --skip-grant-tables 僅限緊急救援: 繞過權限檢查,用畢即執行 mysqladmin flush-privileges 恢復驗證。
  3. --skip-show-databases: 隱藏資料庫列表,降低資訊洩露面。

緊急重置 Root 密碼(第 23 條)

# 1. 停止服務,以跳過授權啟動
mysqld --skip-grant-tables &

# 2. 免密登入修改
mysql -u root mysql
UPDATE user SET Password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;

# 3. 正常重啟服務

總結

安全非一次性配置,而是持續過程:最小權限、加密傳輸、參數化查詢、審計日誌、定期演練 五大支柱缺一不可。

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