【问题标题】:What PostgreSQL query or view can determine who set a users permissions?哪些 PostgreSQL 查询或视图可以确定谁设置了用户权限?
【发布时间】:2012-06-25 19:06:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: postgresql permissions grant rights


    【解决方案1】:

    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 将显示在右上角的属性窗格中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2016-01-10
      • 2014-08-12
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多