我为某个用户创建了一个单独的角色“newrole”和新模式“newschema”,它们应该只执行一些存储的功能。我已设法撤销对当前数据库的模式“public”的访问权限。
以“newrole”身份登录我仍然可以像这样访问 postgres 数据库:
SELECT * FROM pg_user
我想撤销对 postgres 数据库的所有访问权限,并尝试了以下方法无效:
REVOKE ALL ON DATABASE postgres FROM newrole
当以 newrole 身份登录时,我仍然可以读取 postgres 数据库。
如何撤销对 postgres 管理数据库的任何访问权限?
我已经搜索了很长时间,但没有找到任何关于访问 postgres 管理数据库的信息。
TIA,
最佳答案
此问题与数据库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;
但是,系统并不总是遵守这种全面的限制,目录的存在是有原因的,并且在数据库中提供了重要的功能。特定功能可能仍会执行。
一般来说,除非您真的知道自己在做什么,否则您不想摆弄目录。
关于postgresql - 撤销角色对 postgres 数据库的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232458/