2012-10-21 58 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'工作的查询。看到我的答案。 –