Postgres 10. 对其他用户隐藏用户/角色

Osc*_*vis 5 postgresql permissions role users postgresql-10

我安装了 postgresql 10,我想对其他用户隐藏用户/角色的名称。我搜索了其他帖子,有人建议:

REVOKE SELECT ON pg_catalog.pg_authid FROM public;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public;
Run Code Online (Sandbox Code Playgroud)

完成所有这些操作后,user1 无法深入了解用户的信息,(Error retrieving roles from the database server. ERROR: permission denied for relation pg_auth_members)但仍可以将它们全部列出,如下图所示

邮局

当然 user1 不是超级用户。

我已经测试过这个没有效果:

REVOKE SELECT ON pg_catalog.pg_roles FROM user1;
REVOKE SELECT ON pg_catalog.pg_user FROM user1;
Run Code Online (Sandbox Code Playgroud)

对此也进行了测试,但没有效果:

REVOKE SELECT ON pg_catalog.pg_authid FROM user1;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM user1;
Run Code Online (Sandbox Code Playgroud)

如果我启动下一个语句,用户将无法登录并且一切都已损坏:

REVOKE SELECT ON pg_catalog.pg_roles FROM public;
REVOKE SELECT ON pg_catalog.pg_user FROM public;
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?对我来说向其他用户隐藏用户的名称非常重要。

背景:我正在创建一个黑客 ctf(捕获标志)虚拟机。这是挑战之一......重点是避免用户可以看到“正确的数据库用户名”进行连接。这是他/她必须在数据库中查找提示和其他加密内容的内容。

编辑:“悲伤”的解决方法是创建数百个虚拟用户以“尝试隐藏”真实用户......但它必须是一个优雅的解决方案。有什么帮助吗?

Jim*_*nke 2

pgAdmin 使用 pg_roles 来显示该信息,因此运行就足够了

REVOKE SELECT ON pg_catalog.pg_roles FROM public;
Run Code Online (Sandbox Code Playgroud)

但由于该信息在其他视图中也可用,因此您需要隐藏它们,例如 和pg_user视图pg_shadow

它不应阻止用户登录或破坏任何内容,因为在身份验证期间不会使用这些视图,因此您应该确保没有更改任何其他内容。日志可能会向您显示他们无法登录的原因。