2015-04-22 63 views
3

我想撤消數據庫上用戶的所有權限,但我無法讓它正常工作。在PostgreSQL上撤消權限

我做:

REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1; 
+0

'REVOKE CONNECT ON DATABASE db1 FROM user;' –

+0

當你這樣做時會發生什麼?你是否有錯誤,或者只是沒有達到預期效果? – IMSoP

+0

我沒有得到一個錯誤,我只是沒有得到想要的效果。 – ledesma

回答

2

REVOKE ALL是指所有的權限一個對象上,沒有任何相關的對象。在這種情況下,您會說「所有適用於數據庫的權限,作爲單個對象」。在數據庫級別上存在的唯一權限CONNECT,默認情況下,該權限授予特殊角色Public,其中所有其他角色都是成員。

因此,如果以這種方式拒絕用戶訪問,您必須撤銷公開的CONNECT權限,然後明確地將其授予您想要授予訪問權限的角色。

有浮現在腦海中其他幾個選項:

  • 設置pg_hba.conf中
  • 爲用戶和數據庫組合的拒絕規則對數據庫中的所有模式撤銷使用情況,從而使他們可以連接但不能訪問任何東西。我相信public架構已授予公共角色,因此您需要首先像CONNECT一樣撤銷
  • 撤消數據庫中的所有對象。對於不同的對象類型,這需要多個語句,如REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo FROM somebody。您還應該使用ALTER DEFAULT PRIVILEGES以確保您從現在開始創建的對象不可訪問。