postgresql - 仅允许 postgres 用户列表角色

标签 postgresql postgresql-9.1

如何禁止非 super 用户看到postgresql服务器中的其他用户?

例如。如果当前登录的用户不是 super 用户,则结果来自

SELECT * from pg_roles;

\du

应该只包含他的角色的行

最佳答案

您可以撤销对系统目录中身份验证 ID 表的访问权限:

REVOKE SELECT ON pg_catalog.pg_authid FROM public;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public;

请注意,撤销对 pg_roles 的访问权限是不够的,因为 pg_roles 只是 pg_authid 的一个 View ,运行 View 查询很简单手动或使用相同的查询定义新 View 。 information_schema View 也直接使用 pg_authid,并且不受撤销对 pg_roles 访问的影响。如果您已撤销对 pg_authid 的访问权限,则无需撤销对 pg_roles 的访问权限。

请注意,撤销对全局表的访问权限仍然是针对每个数据库的操作。

撤销对系统目录的访问可能会产生副作用,包括:

  • 某些系统功能未按预期运行
  • JDBC 驱动程序等工具中的某些元数据操作失败
  • ...等

并且通常不被认为受支持。

关于postgresql - 仅允许 postgres 用户列表角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999274/

相关文章:

java - BLOB 和 CLOB 的 Hibernate 配置以同时支持 Oracle 和 Postgres

postgresql - 如何从 PL/pgSQL 中的子选择一次更新多条记录

python - psycopg2 部分标识符

postgresql - 如何创建具有默认值的枚举字段?

postgresql - 将 varchar 类型转换为日期

postgresql - 无法使用 MD5 方法从主机连接到在 VM 上运行的 Postgres

python - SQLAlchemy DateTime 时区

sql - postgreSQL 查询 - 在记录的任何字段中查找 id 的存在

sql - postgres - 以编程方式将 1gb 模拟数据加载到表中的方法

ruby-on-rails - 连接表有两个复数词。如何正确命名模型和迁移;为了销毁连接表上的孤儿。事件记录