撤销对 PostgreSQL 的权限

Revoke permissions on PostgreSQL

我正在尝试撤销用户对数据库的所有权限,但无法正常工作。

我在做:

REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1;

REVOKE ALL是指对一个对象的所有权限,而不是对任何相关对象的权限。在这种情况下,您说的是 "all permissions which apply to the database, as a single object"。在数据库级别 存在的唯一权限 CONNECT,默认情况下,它被授予特殊角色 Public,其中所有其他角色都是会员.

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

想到了其他几个选项:

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