撤消PostgreSQL的权限

时间:2015-04-22 20:06:25

标签: postgresql postgresql-9.2

我试图撤销数据库上用户的所有权限,但我无法让它工作。

我在做:

REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1;

1 个答案:

答案 0 :(得分:2)

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

因此,要拒绝以这种方式访问​​用户,您必须从Public撤消CONNECT权限,然后将其明确授予您 要授予其访问权限的角色。

还有一些其他选择可以想到:

  • 在pg_hba.conf
  • 中为该用户和数据库组合设置DENY规则
  • 撤消数据库中所有模式的USAGE,以便它们可以连接但不能访问任何模式。我相信public架构已授予public角色,因此您需要先使用CONNECT撤消
  • 撤消数据库中的所有对象。对于不同的对象类型,这需要多个语句,如REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo FROM somebody。您还应该使用ALTER DEFAULT PRIVILEGES来确保您从现在开始创建的对象无法访问。