安裝MySQL後會自動建立root與匿名用戶(用戶名為空),兩者預設密碼皆為空。許多教程只強調修改root密碼,卻忽略匿名用戶——這在提供Web資料庫服務的環境中極其危險。
作者協助朋友整理主機空間時,上傳簡單PHP測試頁(用戶名、密碼皆空、Host=localhost),發現:
SELECT * FROM mysql.user顯示匿名用戶在localhost擁有極高權限,含GRANT_PRIV。CREATE USER並GRANT高權限,進而以新帳號透過本機MySQL Client連線管理伺服器。根因:mysql_install_db建立的匿名用戶記錄(Host=localhost, User='')在權限表排序中優先於具體用戶,導致本地連線優先匹配匿名記錄。
UPDATE user SET password=PASSWORD('newpass') WHERE user='';
FLUSH PRIVILEGES;
DELETE FROM user WHERE user='';強制所有連線需提供用戶名,利於審計追蹤。
GRANT權限,防止權限失控擴散。mysql系統庫。SHUTDOWN_PRIV、RELOAD_PRIV、PROCESS_PRIV、FILE_PRIV僅保留給管理帳號。匿名用戶是MySQL預設安裝中最被低估的風險點。佈署上線前,務必將其納入安全基線檢查清單,徹底消除「零門檻」本地存取通道。