【问题标题】:Allow only postgres user list roles仅允许 postgres 用户列表角色
【发布时间】:2012-10-22 07:51:35
【问题描述】:

如何禁止非超级用户查看postgresql服务器中的其他用户?

例如。如果当前登录的用户不是超级用户,则结果来自

从 pg_roles 中选择 *;

\du

应该只有行与他的角色

【问题讨论】:

    标签: postgresql postgresql-9.1


    【解决方案1】:

    您可以撤销对系统目录中身份验证 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 驱动程序等工具中的某些元数据操作失败
    • ...等

    并且通常不被认为是受支持的。

    【讨论】:

      【解决方案2】:
      revoke select on pg_roles from public;
      

      【讨论】:

      • @KrzysztofMiksa 怎么没用?我在 Pg 9.0 的实例上进行了尝试,它似乎工作正常:允许从普通用户登录,该用户对其已授权的对象进行正常允许的操作,但该用户在 \du 或 @987654323 上的权限被拒绝@
      • @dbenhur 它不会停止访问information_schema 或直接针对pg_authid 的查询。看我的回答。
      • @CraigRinger 是的,我将我的答案限制在 OPs 特定的示例用例上,并且预期 pg_roles 只是一个可以绕过的视图,但之前的flyby回答并没有深入挖掘。感谢您更全面的回答。
      猜你喜欢
      • 2016-10-13
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2021-06-11
      • 2019-04-02
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多