撤销对 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
来确保您创建的对象从现在开始将无法访问。
我正在尝试撤销用户对数据库的所有权限,但无法正常工作。
我在做:
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
来确保您创建的对象从现在开始将无法访问。