我正在開發一個使用Ruby on Rails的數據倉庫,我應該允許用戶在應用程序數據庫上執行任意的SELECT查詢。我知道這是你通常不應該做的,但它是我的客戶端實際需要的接口(我想不出用戶可能想要做的所有可能的查詢並將它們轉換爲ActiveRecord查詢)。可能有複雜的聯接和子查詢等。 我寧願這樣做(將其集成到我的應用程序),而不是讓他們通過pgAdmin訪問數據庫(我使用postgresql)。用戶生成的SQL查詢
我的問題是:做這件事最安全的方法是什麼?我應該能夠逃脫任何東西像插入,更新,刪除表等...
我想獲取查詢字符串和消毒這些「危險」的話,然後使用ActiveRecord :: Base.connection.execute (sanitized_sql_string)。 這是一個合理的方法嗎?
說得對,讓用戶**鍵入**自己的SQL是危險的。你可以鎖定它們不能損壞你的數據庫的權利,但你不能讓它們不正確地連接表,這可能會產生一個失控的查詢**。 Andyne(sp?)曾經有一種叫做GQL(圖形查詢語言)的產品,它允許用戶點擊對象和線條以圖形方式創建查詢。它在幕後完成了** good ** SQL的工作。您可以採取類似的方法,以便用戶1)不必學習數據庫模型; 2)不必知道SQL即可構建臨時查詢。 –
您可能會更喜歡商店購買的產品,如水晶報表或商業對象。實際上,帶有鏈接表的Microsoft Access並不是那麼糟糕。 –
我不知道,我可能一個人在這裏,但我認爲如果做得對,允許即席查詢是完全正確的。這顯然是一個強大的工具,僅供某些知道SQL的用戶使用。一些蹩腳的編輯總是會有侷限性;我還沒有看到任何我覺得有用的東西。如果使用正確,Postgres中的安全性非常好,並且可以通過將查詢超時設置爲5秒或更長時間來避免*失控查詢*。請記住,[StackOverflow](http://data.stackexchange.com/)實際上允許即席查詢。 –