2016-07-05 34 views
1

我有一個系統,我希望人們可以用許多表對多個數據庫執行任意選擇查詢。使用內部SELECT查詢「消毒」任意SQL?

我可以通過簡單地將它們嵌入到子查詢中來「消毒」查詢,即SELECT * FROM ($USER_SELECT_QUERY)

這將允許用戶做任何種類的SELECT查詢,但會在任何INSERT,UPDATE,DELETE,EXEC等查詢中產生語法錯誤。你能想出任何可以修改/插入/刪除數據的查詢,或者顯示關於主機系統的其他不想要的細節,例如目錄列表或其他任何內容嗎?

假設:

  • 用戶可以訪問在所有附加的數據庫的所有數據。
  • 適當配置/監視查詢時間和資源使用情況以減輕(D)DOS攻擊。
  • (數據庫是在我的情況只讀sqlite的文件)

還請注意,我充分認識到讓用戶來執行任意SQL的一般危險的,所以我想強調的是我m非常具體地詢問使用select-subqueries進行消毒查詢的限制。

+0

爲什麼不設置用戶只讀取數據庫上的訪問權限作爲安全級別?這似乎是一個不必要的複雜因素。 –

+0

我的推理是限制允許的陳述範圍。 'ATTACH'可能是sqlite中的一個問題,其他「怪異」語句如'EXPLAIN'和'VACUUM'在用戶應該允許做的範圍之外。 – jkgeyti

回答