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

标签 postgresql postgresql-9.4

我为某个用户创建了一个单独的角色“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/

相关文章:

postgresql - Postgres 删除 jsonb 字段中的反斜杠

sql - Postgres选择包含json的json数组中的位置

postgresql - 在 PostgreSQL 中显示带有 NULL 的完整日期范围

ubuntu - apt-get 失败并显示 "There are problems and -y was used without --force-yes"

database - django.contrib.gis.db.backends.postgis 与 django.db.backends.postgresql_psycopg2

postgresql - Unicode解码错误: 'ascii' codec can't decode byte in position : ordinal not in range(128)

postgresql - 从 grafana 连接到 postgresql

postgresql - Postgres 9.4 崩溃

mysql - 将数据插入数据库以实现一对多关系的最快方法

c# - 我们可以在 C# 中使用流利的迁移器在 postgresql 中创建数据库吗