前兩天在幫朋友整理他的主頁空間時候,發(fā)現(xiàn)的一點關(guān)于MySQL可能大家都會忽略的問題:我們知道,在安裝完MySQL后,它會自動創(chuàng)建一個root用戶和一個匿名用戶,其初始密碼都是空,對于前者,很多參考資料上都會提醒大家要注意及時設(shè)定一個密碼,而忽略了后者,大概是因為后者默認(rèn)設(shè)定為只能在本機(jī)使用的緣故吧。
但如果你的MySQL是要提供給Web服務(wù)器作數(shù)據(jù)庫服務(wù)的,忽略這個匿名用戶的代價可能相當(dāng)慘重,因為在默認(rèn)設(shè)置下,這個匿名用戶在localhost上幾乎擁有和root一樣的權(quán)限,這時候,如果你的客戶擁有上傳腳本文件、腳本文件可以進(jìn)行MySQL數(shù)據(jù)庫操作(比如允許操作MySQL的php)的權(quán)限已經(jīng)可能將你的MySQL改動得面目全非了:
我今天幫朋友整理他的主頁空間的時候,試著寫了一個很簡單的執(zhí)行sql語句的php文件上傳上去,其中連接字中的user,password我都試著置空,host=localhost,結(jié)果發(fā)現(xiàn)我的sql語句可以執(zhí)行,于是執(zhí)行select * from MySQL.user察看用戶權(quán)限,發(fā)現(xiàn)這個用戶在localhost權(quán)限非常高,連grant_priv都有,(察看的時候,會發(fā)現(xiàn)在root用戶下有兩行用戶名、密碼為空的,但各項權(quán)限有y/n的,就是這個匿名用戶本地、遠(yuǎn)程權(quán)限設(shè)置了)
所以我試著用這個php頁面創(chuàng)建一個新用戶,并grant給他較高的權(quán)限,結(jié)果一舉成功,這樣我就可以用這個新用戶通過我本機(jī)的MySQL client連接到這個網(wǎng)站的MySQL server,并用這個新建立的用戶的管理權(quán)限對這個網(wǎng)站的MySQL server進(jìn)行管理,看到自己可以進(jìn)行這樣輕易獲得深入的數(shù)據(jù)庫操作,我怎么還敢把朋友的主頁空間的敏感資料放入這個MySQL server呢?
改進(jìn)建議:
1、在安裝完成MySQL 后,不僅改變root用戶的的密碼,也同時改變匿名用戶的密碼,方法類似改變root的密碼的方式:
| 以下為引用的內(nèi)容: MySQL> UPDATE user set password=PASSWORD('yournewpassword') where user=''; MySQL>FLUSH PRIVILEGES; |
新聞熱點
疑難解答
圖片精選