撤销PostgreSQL上的权限

6
我正在尝试撤销一个用户在数据库上的所有权限,但我无法让它工作。
我正在执行以下操作:
REVOKE ALL PRIVILEGES ON DATABASE db1 FROM user1;

REVOKE CONNECT ON DATABASE db1 FROM user; - Rahul Tripathi
当你这样做时会发生什么?你会得到一个错误,还是只是没有得到期望的效果? - IMSoP
我没有收到错误提示,只是没有得到预期的效果。 - ledesma
请明确一点,编辑问题以包括您如何测试结果,您想要发生什么以及实际发生了什么。这使得理解问题更容易,也不太可能有人会给出不适用的答案。 - IMSoP
1个回答

4
REVOKE ALL 指的是一个对象上的所有权限,而不是相关对象的所有权限。在这种情况下,您是在说“适用于数据库的所有权限,作为单个对象”。唯一存在于 数据库级别 的权限是 CONNECT,默认情况下,它被授予特殊角色 Public,所有其他角色都是其成员。
因此,要以这种方式拒绝用户访问权限,您需要从 Public 中撤销 CONNECT 权限,然后明确地将其授予您希望授予访问权限的角色。
还有一些其他选项:
  • 在 pg_hba.conf 中为该组合设置 DENY 规则。
  • 撤销数据库中所有模式的 USAGE 权限,以便它们可以连接但无法访问任何内容。我相信 public 模式已经授予了公共角色的权限,因此您需要像 CONNECT 一样首先撤销权限。
  • 从数据库中的对象中撤销所有内容。这需要多个语句,如 REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo FROM somebody 用于不同的对象类型。您还应使用 ALTER DEFAULT PRIVILEGES 确保您从现在开始创建的对象不可访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接