2010-08-05 58 views
4

我想創建一個SQL沙箱,允許用戶在PostGIS數據庫中執行任意SELECT查詢。基本上,我想讓用戶訪問psql來玩。允許任意SQL安全執行所需的權限

顯然這是一個安全災難,如果允許寫入訪問。我怎樣才能建立這樣的查詢數據是系統中允許的,但有一個用戶的合理可能性:

  1. 數據庫
  2. 獲得對服務器
  3. 削弱了系統的更廣泛的訪問損害數據像SELECT * from long_table, long_table, long_table, long_table, long_table, long_table, long_table這樣的查詢將花費一生的時間來執行

請在您的答案中儘可能具體。

回答

2

問題#1和#2通過其他人已經注意到的權限的顯式GRANT和REVOKE來處理。

至於#3,

ALTER ROLE <rolename> SET statement_timeout = '60000' 

一直工作很適合我。這將終止執行時間超過1分鐘(60000毫秒)的任何​​查詢。我們在phpPgAdmin中有幾個用戶編寫的查詢導致問題後發現了這個...

+1

它仍然可以殺死你的I/O,它只是一個單一的查詢。每分鐘啓動一次查詢,您的數據庫仍然有很多問題。 – 2010-08-05 14:45:17

+0

確實如此,但這至少可以阻止一次性意外(或者僅僅是腦死亡)的嚴重不良查詢,這些問題將成爲大部分問題。我們在任何已將此設置添加到能夠編寫即席查詢的用戶上的服務器上沒有其他問題。 – 2010-08-05 15:53:51

2

那麼你只是真的需要CREATE a ROLE然後GRANT read only access顯式地給你想要的東西。任何你不授予的東西,他們不能做(只要他們不是超級用戶)。

如果您已授予只讀訪問權限,但他們不是超級用戶,則他們無法訪問底層系統。這並不是說你不應該將postgres安裝爲非特權用戶,你應該 - 簡單地說,不應該有必要完成你列出的內容。

好的,你編輯你的文章,包括髮布瘋狂的查詢。我不相信postgres目前有辦法限制每個用戶的查詢資源。

0

當用戶可以執行他自己的一段SQL時,無法防止#3。您需要一個執行預定義SQL的(小型)應用程序。即使VIEW也無法幫助你,每個人都可以加入一些觀點來削弱你的系統。

+0

該死的。我有點希望可能會有某種與PAM的limits.conf類似的系統,但對於數據庫查詢... – fmark 2010-08-05 07:03:25

1

您可以將postgres安裝爲非特權用戶,並以此方式運行。通過這種方式,您可以利用現有的系統權限來限制用戶可以對數據庫執行的操作,包括將他們的訪問權限隔離到他們自己的數據庫。請參閱本頁面底部的說明:

http://www.postgresql.org/docs/current/interactive/tutorial-start.html

如果您自動的此某些部分,說會給人一種'設置Postgres的命令來運行,瞧。

1

對於#3,你可以編寫一些代碼來監視查詢活動並根據某些標準使用postgre中的系統視圖來殺死那些你認爲是瘋狂的查詢?