2012-06-23 28 views
1

我想撤銷數據庫用戶的權限,似乎只有授予他們的用戶才能撤消權限。這裏有討論這個問題的線索。 http://archives.postgresql.org/pgsql-bugs/2007-05/msg00234.php什麼PostgreSQL查詢或視圖可以確定誰設置了用戶權限?

該線程可以追溯到2007年,我不太確定它是否被視爲bug,以及這個問題是否仍然存在於我正在使用的PostgreSQL 8.4中。

有沒有可以顯示該信息的查詢或視圖?這樣我可以使用set session authorization並撤消它。

回答

2

PostgreSQL 8.4已過時。詳情請查閱versioning policy。但是,由於它是SQL的標準行爲(正如Tom Lane在您提供的鏈接討論中所述),它不太可能發生變化。

權限與相應的對象一起存儲在系統目錄中。例如,對於一個表:

SELECT n.nspname, c.relname, c.relacl 
FROM pg_catalog.pg_class c 
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace 
WHERE c.oid = 'myschema.mytbl'::regclass -- your tablename here 

會產生這樣的:

nspname | relname |     relacl 
----------+---------+--------------------------------------------- 
myschema | mytbl | {postgres=arwdDxt/postgres,fuser=r/fadmin} 

的角色名後的斜線是設保人。要撤消,如用戶fadmin(或任何超級用戶):

REVOKE SELECT ON TABLE myschema.mytbl FROM fuser; 

,我們在其他系統表類似*acl列。 pg_namespace的模式等見​​


更簡單的方法是使用pgAdmin的和對象瀏覽器左側選擇一個對象。 ACL將顯示在右上角的屬性窗格中。

相關問題