获取用于 PostgreSQL 登录角色的加密密码

9
有没有一种方法可以从PostgreSQL服务器中获取登录角色的加密密码呢?
为了更好地说明我的问题,我试图通过Ansible来管理postgres用户的密码。为此,我想要检查加密密码的当前值(例如'md5...')以查看它是否是最新的。如果不是,我将执行适当的ALTER ROLL命令进行更新。
我知道我可以使用pg_dumpall来查看密码,例如:
$ pg_dumpall --roles-only
<snip>
CREATE ROLE postgres;
ALTER ROLE postgres WITH ... PASSWORD 'md5...';

但这似乎不是一种非常可靠的方法。
1个回答

16

尝试读取 rolpassword 字段。

SELECT rolpassword FROM pg_authid

pg_authid

该目录包含有关数据库授权标识符(角色)的信息。角色涵盖了“用户”和“组”的概念。用户本质上只是具有rolcanlogin标志设置的角色。任何角色(带或不带rolcanlogin)都可以有其他角色作为成员,请参阅pg_auth_members。

由于此目录包含密码,因此不能公开读取。pg_roles是对pg_authid的公开可读视图,其中密码字段被清空。

第19章详细介绍了用户和权限管理的信息。

由于用户身份标识是集群范围的,因此pg_authid在集群的所有数据库之间共享:每个集群只有一个pg_authid副本,而不是每个数据库一个。


2
pg_authid中的密码在使用md5加密前,会与用户名连接起来,因此将其与裸密码的md5进行比较是无用的。(https://www.postgresql.org/docs/current/static/catalog-pg-authid.html) - gilad905
1
对于“postgres”用户:SELECT rolpassword FROM pg_authid WHERE rolname='postgres'; 或者对于所有用户,包括用户名:SELECT rolname, rolpassword FROM pg_authid; - mivk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接