【问题标题】:Revoke connect from superuser撤销超级用户的连接
【发布时间】:2013-01-15 12:48:21
【问题描述】:

有没有办法从服务器上定义为超级用户的角色撤销数据库的连接(或最好是所有)权限?在开发服务器上,我们有几个数据库——其中一个是共享的,但其余的应该只由一个开发人员拥有,其他人没有连接权限。目前所有开发者都是具有登录选项的超级用户。

CREATE ROLE dev_name LOGIN
  ENCRYPTED PASSWORD '...'
  SUPERUSER INHERIT CREATEDB CREATEROLE REPLICATION;

我尝试了很多方法:

REVOKE CONNECT ON DATABASE test_db FROM dev_name;
revoke select on all tables in schema public from dev_name;

然后我检查过:

SELECT * FROM has_database_privilege('dev_name', 'test_db', 'connect');

仍然返回 true。

我尝试了解决方法并将连接限制更改为另一个值,但即使我第一次登录超级用户仍然可以连接:

 CONNECTION LIMIT = 1;

那么,也许有机会在不弄乱 pg_hba 或放弃其他开发人员的超级用户状态的情况下做到这一点?

【问题讨论】:

    标签: security postgresql roles privileges


    【解决方案1】:

    不,您需要从这些开发者那里删除超级用户身份。

    手册中的相关引述:

    这些子句确定新角色是否是“超级用户”,谁可以 覆盖数据库中的所有访问限制

    【讨论】:

    • 但是请注意,您不能免于 pg_hba.conf 文件中的访问控制。但看起来 OP 正在以某种方式滥用超级用户。
    猜你喜欢
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2012-02-26
    • 2023-03-09
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多