MySQL 安裝後會自動創建 root 和匿名用戶(user='')。許多運維只關注 root 密碼,卻忽略了匿名用戶。預設情況下,匿名用戶僅允許 localhost 連線,但權限幾乎等同 root。一旦 Web 應用存在文件上傳漏洞,攻擊者可上傳 PHP 腳本,利用匿名用戶建立高權限帳號,進而接管數據庫服務器。
# 1. 以 root 登入
mysql -u root -p
# 2. 查看現有用戶
SELECT user, host FROM mysql.user;
# 輸出通常包含兩個匿名用戶:''@localhost 和 ''@hostname
# 3. 刪除匿名用戶
DELETE FROM mysql.user WHERE user = '';
# 4. 驗證刪除結果
SELECT user, host FROM mysql.user;
# 僅剩 root 用戶
# 5. 刷新權限並退出
FLUSH PRIVILEGES;
EXIT;
FLUSH PRIVILEGES 讓修改立即生效UPDATE user SET password=PASSWORD('...') WHERE user='' 只是修改密碼,無法消除匿名登入入口,仍不安全mysql_secure_installation,它會自動刪除匿名用戶、禁止 root 遠程登入、移除測試庫等root 遠程登入:UPDATE mysql.user SET Host='localhost' WHERE User='root';mysql.user 表,確保無異常帳號