撤消对角色的postgres数据库的访问权限

sib*_*ert 5 postgresql postgresql-9.4

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

登录为"newrole"我仍然可以访问postgres数据库,如下所示:

SELECT * FROM pg_user
Run Code Online (Sandbox Code Playgroud)

我想撤销对postgres数据库的所有访问权限并尝试执行以下操作:

REVOKE ALL ON DATABASE postgres FROM newrole
Run Code Online (Sandbox Code Playgroud)

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

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

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

TIA,

Pat*_*ick 7

此问题与数据库无关postgres.相反,您希望操纵当前数据库的目录.每个数据库都有一个关于模式中所有对象的信息目录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;
Run Code Online (Sandbox Code Playgroud)

但是,系统并不总是遵守这种全面限制,目录是有原因的,并在数据库中提供重要功能.特别是功能仍然可以执行.

一般来说,除非你真的知道自己在做什么,否则不想弄乱目录.