2012-01-06 42 views
1

我想允許SELECT查詢到我的數據庫,但不想允許更新(或丟棄!)。這足以淨化用戶提供的SQL查詢嗎?

是否足以確保查詢開始與SELECT和不包含分號?

我使用JDBC來執行查詢,目前針對MySQL的,但希望不要將其限制了這一點。

編輯: 我很欣賞使用無法更新的用戶的謹慎,但想知道這是否有必要,而不是僅僅迷信。

+2

大概不會。你應該通過只提供'SELECT'權限來管理這個。請說出RDBMS。 – 2012-01-06 23:27:30

+2

這是一個等待發生的安全災難 - 如果你真的必須允許SQL查詢,然後通過一個特殊用戶執行它們,而這個特殊用戶可能需要最少的特權! – Yahia 2012-01-06 23:29:36

回答

3

一種更好的方式去了解這是創建一個新帳戶,並允許該帳戶的某些命令。

+0

這沒有幫助。如果你讓我運行一個我選擇的SELECT查詢,那麼我只能使用'USAGE'特權來使服務器崩潰。 – 2012-01-07 00:26:07

1

你不能執行用戶提交的代碼。允許用戶提交代碼是一種很好的方式,至少可以讓自己面對拒絕服務攻擊。例如,攻擊者可以輕鬆地提交帶有保證關閉服務器的巨大笛卡爾產品的查詢。

您可以放心地允許用戶指定,而不是代碼。然後通過使用帶有參數的預準備語句將它們輸入的值組合到SQL查詢中。

允許用戶提交的SQL查詢是危險的,因爲shellexec($_GET["cmd"]);

+0

謝謝比爾,但問題是試圖弄清楚這是如何危險的。 DOS是我可以生活的東西,我害怕數據刪除或妥協。 – TimP 2012-01-07 09:55:16