2012-10-21 97 views
1

如何禁止非超級用戶在postgresql服務器中查看其他用戶?只允許postgres用戶列表角色

ex。如果當前登錄的用戶不是超級用戶,則來自

的結果

SELECT * from pg_roles;

\杜

應該與他的角色只能排

回答

3

您可以在系統目錄中取消獲得的認證ID表:

REVOKE SELECT ON pg_catalog.pg_authid FROM public; 
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public; 

請注意,撤消對pg_roles的訪問是不夠的,因爲pg_roles只是pg_authid的視圖,而且手動運行視圖查詢或使用相同的查詢定義新視圖是微不足道的。 information_schema視圖也直接使用pg_authid,並且不會因撤銷對pg_roles的訪問而受到影響。如果您已撤銷對pg_authid的訪問權限,則無需撤銷對pg_roles的訪問權限。

請注意,撤消對全局表的訪問仍然是按數據庫操作。

撤銷訪問系統目錄可能有副作用,包括:在像JDBC驅動程序未能

  • ...等
  • 工具預計
  • 一些元數據操作不工作

    • 某些系統功能

    並且通常不被支持。

  • 0
    revoke select on pg_roles from public; 
    
    +0

    不幸的是我試圖這樣做,那是行不通的。 –

    +1

    @KrzysztofMiksa它怎麼沒用?我在Pg9.0的一個實例上試了一下,它似乎工作正常:允許從普通用戶登錄,該用戶對其已授予對象的正常允許的操作,但在'\ du'或''du' select ... from pg_roles' – dbenhur

    +1

    @dbenhur它不會停止訪問'information_schema'或直接針對'pg_authid'工作的查詢。看到我的答案。 –