前言
資料庫是企業核心資產。備份機制可應對軟硬體故障,但阻擋外部入侵需管理員手動建立防線。MySQL 提供多項便利功能顯著降低風險。
六大防護措施
1. 移除授權表中的萬用字元
- 避免
GRANT ... ON *.* TO 'user'@'%' 等過度授權。
- 最小權限原則:僅授予必要資料庫、資料表、欄位權限。
- 嚴控超級權限(
SUPER、GRANT、FILE 等),防止一般帳號修改伺服器配置或存取全庫。
- 稽核指令:
SHOW GRANTS FOR 'user'@'host'; 檢查每個帳號實際權限。
2. 強制使用強密碼
- 安裝後首要任務:設定 root 密碼(預設為空)。
- 拒絕生日、帳號名、字典單字等弱密碼。
- 啟用
--secure-auth 選項,禁用舊版不安全密碼雜湊格式。
3. 檢查設定檔權限
- 客戶端
.my.cnf 以明文儲存密碼,權限必須設為 0600,僅擁有者可讀寫。
- 放置於非公開目錄(如使用者家目錄),避免被其他系統使用者讀取。
4. 加密客戶端與伺服器通訊
- 預設密碼加密傳送,但 SQL 指令與資料為明文,易遭竊聽。
- 啟用 MySQL 內建 SSL,或使用 SSH 通道轉發(Port Forwarding)建立加密管道。
- 最佳架構:Web 伺服器與資料庫同機,透過 Unix Socket 通訊,關閉 TCP/IP 埠。
5. 禁止不必要的遠端存取
- 啟動參數
--skip-networking 關閉 TCP/IP 監聽,僅允許本機 Socket 連線。
- 或在
my.cnf 設定 bind-address=127.0.0.1 綁定本地回環介面。
- 大幅減少網路攻擊面。
6. 主動監控存取日誌
- 一般查詢日誌:記錄每次連線/斷線時間戳與完整 SQL,發現異常行為(如非預期
DROP TABLE、大量失敗登入)的首要線索。
- 定期審閱錯誤日誌、慢查詢日誌、二進位日誌。
- 安全防護是持續過程,需持續更新最佳實務、修補漏洞。
來源
本文整理自愛上簡單部落格:原文連結