什么PostgreSQL查询或视图可以确定谁设置用户权限?

时间:2012-06-23 23:38:01

标签: postgresql permissions grant rights

我正在尝试撤消数据库用户的权限,似乎权限只能由授予他们的用户撤消。这里有讨论这个问题的线索。 http://archives.postgresql.org/pgsql-bugs/2007-05/msg00234.php

该主题可以追溯到2007年,我不确定它是否被视为错误,以及我正在使用的PostgreSQL 8.4中是否仍存在该问题。

是否有可以显示该信息的查询或视图?这样我可以使用set session authorization并撤消它。

1 个答案:

答案 0 :(得分: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用于模式等。请参阅list of system tables in the manual.


更简单的方法是使用 pgAdmin 并在左侧的对象浏览器中选择一个对象。 ACL将显示在右上角的属性窗格中。