撤消对PostgreSQL的权限

撤消对PostgreSQL的权限,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我试图撤销数据库中用户的所有权限,但无法使其正常工作 我正在做: REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1; REVOKE ALL指的是对一个对象的所有权限,而不是对任何相关对象的权限。在本例中,您说的是“作为单个对象应用于数据库的所有权限”。数据库级别存在的唯一权限是CONNECT,默认情况下,该权限授予特殊角色Public,所有其他角色都是该角色的成员 因此,要以这种方式拒绝对用户的访问,您必须从Public中撤消CONNECT特权,

我试图撤销数据库中用户的所有权限,但无法使其正常工作

我正在做:

REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1;

REVOKE ALL
指的是对一个对象的所有权限,而不是对任何相关对象的权限。在本例中,您说的是“作为单个对象应用于数据库的所有权限”。数据库级别存在的唯一权限是
CONNECT
,默认情况下,该权限授予特殊角色
Public
,所有其他角色都是该角色的成员

因此,要以这种方式拒绝对用户的访问,您必须从Public中撤消CONNECT特权,然后显式地将其授予您希望授予访问权限的角色

我还想到了一些其他选择:

  • 在pg_hba.conf中为用户和数据库的组合设置拒绝规则
  • 撤消对数据库中所有架构的使用,以便它们可以连接但不能访问任何内容。我相信
    public
    模式已经将此权限授予了public角色,因此您需要首先撤销CONNECT
  • 从数据库中的对象中撤消所有。对于不同的对象类型,这需要多条语句,如
    REVOKE ALL privilege ON SCHEMA foo中的所有表的权限。您还应该使用
    alterdefaultprivileges
    来确保从现在开始创建的对象不可访问

从用户撤销数据库db1上的连接当您这样做时会发生什么?你是有错误,还是没有达到预期效果?我没有错误,只是没有达到预期效果。为了清楚起见,请编辑问题,包括你是如何测试结果的,你希望发生什么,以及实际发生了什么。这样可以更容易地理解问题,也不太可能有人会给你一个不适用的答案。