核心責任
MySQL 管理員必須保護資料庫內容安全,確保僅經嚴格認證的用戶能存取記錄。安全性包含兩個層面:
- 內部安全性:檔案系統層面,防止擁有伺服器帳號的本地用戶直接存取/竄改資料目錄
- 外部安全性:網路層面,防止未授權的網路連線存取資料庫
一、內部安全性風險與防護
需保護的核心資產
- 資料庫檔案:維護資料機密性與專有性
- 日誌檔案:通用/更新日誌含查詢文本,
GRANT、SET PASSWORD 等敏感操作會以明文記錄密碼
- 狀態檔案:防止被惡意修改導致服務異常
資料目錄讀取風險實測
若表檔案可讀,攻擊者可竊取檔案並在受控 MySQL 實例中掛載讀取:
- 在同一主機啟動第二個 MySQL 實例(不同端口/資料目錄)
- 執行
mysql_install_db 初始化,獲得 root 權限
- 將目標表檔案複製至新實例
test 資料庫目錄
- 直接查詢竊取資料
防護措施
- 資料目錄擁有者設為
mysql 用戶,權限 700(drwx------)
- 日誌檔案同樣限制權限,避免洩露敏感 SQL
- 關閉不必要的本地帳號,實施最小權限原則
- 考慮使用 SELinux/AppArmor 強制存取控制
二、外部安全性基礎
MySQL 通過 mysql 資料庫中的授權表實現靈活權限系統:
- 設定授權表拒絕無效帳號/密碼的連線
- 僅允許必要的主機/IP 連線(避免
% 通配符)
- 強制使用強密碼策略
三、關鍵檢查清單
- ✅
datadir 擁有者為 mysql:mysql,權限 700
- ✅ 日誌目錄權限
700,定期輪轉清理
- ✅ 無匿名用戶(
DELETE FROM mysql.user WHERE User='';)
- ✅
root 僅允許 localhost 連線
- ✅ 啟用 SSL 加密傳輸(生產環境強制)
- ✅ 定期審核授權表,回收過期/多餘權限