在連接 MySQL 伺服器時,密碼雖會加密傳輸,但其他資料預設仍以明文形式傳送,存在被攔截風險。為提升安全性,可採用壓縮協議(MySQL 3.22+)或部署 SSH 建立加密的 TCP/IP 連線。以下整理七項關鍵防護措施,助您構建更堅固的資料庫防線。
未設密碼的帳號允許任意用戶以 mysql --user other_user database 方式存取。安裝完成後執行 mysql_secure_installation 即可檢測並修正此問題。
透過 mysql_install_db 建立授權表,隨後以 root 登入更新密碼:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
mysql> FLUSH PRIVILEGES;
建立專屬低權限系統用戶(如 mysql)運行服務。MySQL 內部用戶體系與作業系統用戶獨立,此舉不影響功能,卻能限縮潛在入侵影響範圍。
若 mysql.server 腳本包含 root 密碼,務必將其權限設為 600 僅 root 可讀。同時確認資料目錄擁有者為運行 mysqld 的用戶,並移除其他讀寫權限。
mysqladmin processlist 會顯示正在執行的完整查詢語句(含修改密碼的 SQL)。僅授予必要管理帳號,並利用 MySQL 為 PROCESS 權限保留的額外連線槽進行監控。
擁有 FILE 權限的用戶可讀寫伺服器檔案系統(如 /etc/passwd),並透過 LOAD DATA 導入資料表再以 SELECT 讀取,極易造成敏感資訊洩露。
若 DNS 不可信,授權表中應直接使用 IP。嚴禁使用含通配符(%)的主機名,防止反向解析詐騙導致授權繞過。
落實上述設定後,MySQL 主機將具備較完善的基線防護,大幅降低被輕易攻破的風險。建議定期複核權限配置,並結合防火牆、審計日誌構建纵深防御體系。