2014-02-13 79 views
5

我有一個MySQL服務器(服務器版本:5.1.68-社區; MySQL客戶端版本:5.0.51a)。有沒有辦法限制所有用戶對information_schema的所有訪問權限?MYSQL限制用戶訪問information_schema

會發生什麼情況是,有些客戶網站經常通過SQL注入攻擊,他們可以從information_schema表/視圖獲取數據庫結構。當然,我們需要更改PHP代碼以防止SQL注入,但我仍想限制對整個服務器範圍內的information_schema的訪問。

請指導我...在此先感謝

回答

12

INFORMATION_SCHEMA是持有即將當前用戶可以訪問所有數據庫元信息的虛擬數據庫。即它根據用戶的權限動態構建。這不是真正的數據庫。你應該而不是嘗試在任何情況下更改權限 - 它根據服務器的狀態動態更新。

所以你的問題沒有什麼意義。如果有人會侵犯一些用戶並通過權限獲得系統控制權,那麼他將能夠根據定義訪問該用戶的INFORMATION_SCHEMA(因爲該用戶可以訪問任何允許其權限的內容 - INFORMATION_SCHEMA是「投影」用戶的權限)。

+1

非常感謝您的快速回復。我的問題不在於有人妥協其他用戶。但是對於SQL注入,任何人都可以注入一個sql語句,如'....%20union%20select%201,group_concat(table_name),3%20%20from%20information_schema.tables%20where%20table_schema = database()'一個實際的注入發生在我的網站上)到PHP代碼並獲取當前數據庫的結構。我完全理解PHP代碼中的漏洞必須修復,但是如果我們可以限制來自information_schema的所有用戶的SELECT特權(至少),將會更安全。 – Sujith

+2

您應該認識到:如果SQL注入_was successful_ - 那麼無法阻止用戶使用它自己的權限。 'INFORMATION_SCHEMA'只是一個投影。如果用戶有權訪問某個表 - 那麼即使不訪問該數據庫,他也會這樣做。在你的情況下,他只是使用'SHOW TABLES' –

+1

你是絕對正確的,我完全同意你的看法。關於樣品注射,有了它,他們可以得到表格列表,然後進行另一次注射以獲取數據,然後在這些表格上添加/編輯/刪除,我們會遇到麻煩。 – Sujith

0

人們不能阻止訪問INFORMATION_SCHEMA(還), 但是在SQL-注射通過GET請求的情況下,很容易做:在你的的.htaccess

RewriteCond %{REQUEST_FILENAME} !handle_error\.php 
RewriteCond %{QUERY_STRING} information_schema 
RewriteRule ^(.*?)   /handle_error.php [R=301,L] 

這應該節省一點頭痛。