如何禁止非 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/