在協助友人整理網站空間時,我發現了一個極易被忽視的 MySQL 安全隱患:安裝完成後,MySQL 預設會建立 root 用戶與一個匿名用戶(用戶名為空),兩者初始密碼均為空。雖然大多數文檔都強調修改 root 密碼,但往往忽略了匿名用戶,誤以為它僅限本機登入,風險可控。
若 MySQL 作為 Web 服務的後端資料庫,忽略匿名用戶將釀成大禍。預設情況下,該用戶在 localhost 擁有幾乎與 root 同等的高權限,甚至包含 GRANT 權限。我上傳一個簡單的 PHP 腳本測試,連接參數用戶名、密碼均留空、主機設為 localhost,竟能成功執行 SQL 語句。查詢 mysql.user 表發現,該匿名用戶在本地擁有極高權限,甚至可以創建新用戶並授予管理權限,進而從本機客戶端遠程連線並完全控制資料庫伺服器。
UPDATE user SET password=PASSWORD('newpass') WHERE user=''; FLUSH PRIVILEGES;,或直接刪除:DELETE FROM user WHERE user='';。GRANT 權限,防止權限無序擴散。UPDATE、DELETE、CREATE、DROP 等權限,嚴禁普通用戶操作 mysql 系統庫。mysql.user 表,移除非必要用戶的 shutdown_priv、reload_priv、process_priv、file_priv 等權限,防止敏感資訊洩露。資料庫安全容不得半點馬虎,匿名用戶看似不起眼,實則是入侵者提權的「後門」。建議所有 DBA 立即排查並加固此配置,守住資料安全的第一道防線。