我为一个应该只执行一些存储功能的用户创建了一个单独的角色“newrole”和新模式“newschema”。我已设法撤销对当前数据库的模式“public”的访问权。
以“newrole”身份登录我仍然可以访问postgres数据库,如下所示:
SELECT * FROM pg_user
我想撤销对postgres数据库的所有访问权限并尝试执行以下操作:
REVOKE ALL ON DATABASE postgres FROM newrole
以newrole身份登录时,我仍然可以阅读postgres数据库。
如何取消对postgres管理数据库的任何访问?
我已经搜索了很长时间但没有找到关于访问postgres管理数据库的任何内容。
TIA,
答案 0 :(得分:7)
此问题与数据库postgres
无关。相反,您希望操纵当前数据库的目录。每个数据库都有一个关于模式pg_catalog
中所有对象的信息目录,以及模式information_schema
中符合标准的表单的信息目录,因此您应该限制对相关角色以及{{{}的访问权限。 1}}角色,因为每个角色也是该角色的成员:
public
但是,系统并不总是遵守这种全面限制,目录存在,并在数据库中提供重要功能。特别是功能仍然可以执行。
一般情况下,除非你真的知道自己在做什么,否则你不想弄清楚目录。
答案 1 :(得分:3)
你应该可以运行这个:
select * FROM information_schema.table_privileges where grantee = 'newrole';
显示newrole的所有权限。有了这些信息,您应该能够明确撤销除“newschema”
之外的所有内容