撤销角色对 postgres 数据库的访问

Revoke access to postgres database for a role

我为某个用户创建了一个单独的角色 "newrole" 和新模式 "newschema",它们应该只执行一些存储的功能。我已设法撤销对当前数据库的架构 "public" 的访问权限。

以 "newrole" 身份登录我仍然可以像这样访问 postgres 数据库:

SELECT * FROM pg_user

我想撤销对 postgres 数据库的所有访问权限,并尝试了以下方法无效:

REVOKE ALL ON DATABASE postgres FROM newrole

当以 newrole 身份登录时,我仍然可以读取 postgres 数据库。

如何撤销对 postgres 管理数据库的任何访问权限?

我搜索了很长时间,但没有找到任何关于访问 postgres 管理数据库的信息。

TIA,

你应该能够运行这个:

select *  FROM information_schema.table_privileges where grantee = 'newrole';

显示新角色的所有权限。有了这些信息,您应该能够明确撤销除访问 'newschema'

之外的所有内容

此问题与数据库无关postgres。相反,您想操作当前数据库的 catalog。每个数据库都有关于模式 pg_catalog 中所有对象的信息目录,并且在模式 information_schema 中以符合标准的形式存在,因此您应该限制对相关角色以及 public 角色,因为每个角色也是该角色的成员:

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM newrole;
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public;
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM newrole;
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM public;

但是,系统并不总是遵守这种全面的限制,目录存在是有原因的,并且在数据库中提供了重要的功能。特定功能可能仍会执行。

一般来说,除非您真的知道自己在做什么,否则您不想fiddle使用目录。