MySQL安全問題(匿名使用者)的一點心得

來源:互聯網
上載者:User
mysql|安全|問題|心得 前兩天在幫朋友整理他的首頁空間時候,發現的一點關於MySQL可能大家都會忽略的問題:我們知道,在安裝完MySQL後,它會自動建立一個root使用者和一個匿名使用者,其初始密碼都是空,對於前者,很多參考資料上都會提醒大家要注意及時設定一個密碼,而忽略了後者,大概是因為後者預設設定為只能在本機使用的緣故吧。

  但如果你的MySQL是要提供給Web伺服器作資料庫服務的,忽略這個匿名使用者的代價可能相當慘重,因為在預設設定下,這個匿名使用者在localhost上幾乎擁有和root一樣的許可權,這時候,如果你的客戶擁有上傳指令檔、指令檔可以進行MySQL資料庫操作(比如允許操作MySQL的php)的許可權已經可能將你的MySQL改動得面目全非了:

  我今天幫朋友整理他的首頁空間的時候,試著寫了一個很簡單的執行sql語句的php檔案上傳上去,其中串連字中的user,password我都試著置空,host=localhost,結果發現我的sql語句可以執行,於是執行select * from MySQL.user察看使用者權限,發現這個使用者在localhost許可權非常高,連grant_priv都有,(察看的時候,會發現在root使用者下有兩行使用者名稱、密碼為空白的,但各項許可權有y\n的,就是這個匿名使用者本地、遠程使用權限設定了)

  所以我試著用這個php頁面建立一個新使用者,並grant給他較高的許可權,結果一舉成功,這樣我就可以用這個新使用者通過我原生MySQL client串連到這個網站的MySQL server,並用這個建立立的使用者的系統管理權限對這個網站的MySQL server進行管理,看到自己可以進行這樣輕易獲得深入的資料庫操作,我怎麼還敢把朋友的首頁空間的敏感資料放入這個MySQL server呢?

  改進建議:

  1、在安裝完成MySQL 後,不僅改變root使用者的的密碼,也同時改變匿名使用者的密碼,方法類似改變root的密碼的方式:

  MySQL> UPDATE user set password=PASSWORD('yournewpassword') where user='';
  MySQL>FLUSH PRIVILEGES;

  2、如非必要,刪除這個匿名使用者,這樣所有人要使用MySQL 都必須提供使用者名稱,即便日後出了問題,也容易尋找問題的源頭。

  3、除了root使用者外,其他使用者包括匿名使用者(如果沒有刪除這個使用者)不應該擁有grant許可權,防止系統管理權限不受控制的擴散出去。

  4、賦予使用者update\delete\alert\create\drop許可權的時候,應該限定到特定的資料庫,尤其要避免普通客戶擁有對MySQL資料庫做操作的許可權,否則你的系統設定很可能被替換掉。

  5、檢查MySQL.user表,取消不必要使用者的shutdown_priv,reload_priv,process_priv和File_priv許可權,這些許可權可能泄漏更多的伺服器資訊包括非MySQL的其它資訊出去。

  6、如果不打算讓你的使用者使用MySQL資料庫,在提供諸如php這樣的指令碼語言的時候,重新設定或編譯你的php,取消它們對MySQL的預設支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.