撤消对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角色,因此您需要首先撤销CONNECTpublic
- 从数据库中的对象中撤消所有。对于不同的对象类型,这需要多条语句,如
REVOKE ALL privilege ON SCHEMA foo中的所有表的权限。您还应该使用
来确保从现在开始创建的对象不可访问alterdefaultprivileges
从用户撤销数据库db1上的连接代码>当您这样做时会发生什么?你是有错误,还是没有达到预期效果?我没有错误,只是没有达到预期效果。为了清楚起见,请编辑问题,包括你是如何测试结果的,你希望发生什么,以及实际发生了什么。这样可以更容易地理解问题,也不太可能有人会给你一个不适用的答案。