我以超级用户postgres的身份登录到数据库中。
postgres=# SELECT * FROM pg_user;
+----------+----------+-------------+----------+---------+--------------+----------+----------+-----------+
| usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig |
+----------+----------+-------------+----------+---------+--------------+----------+----------+-----------+
| postgres | 10 | t | t | t | t | ******** | (null;) | (null;) |
| test | 24763 | f | f | f | f | ******** | (null;) | (null;) |
+----------+----------+-------------+----------+---------+--------------+----------+----------+-----------+
(2 rows)我已经列出了数据库中的所有用户。如何获得普通用户test的密码?
发布于 2022-10-02 22:48:19
密码是根据文档加密的:
密码始终存储在系统目录中。加密关键字没有任何效果,但为了向后兼容性而被接受。加密方法由配置参数password_encryption决定。如果所提供的密码字符串已经以MD5加密或SCRAM加密格式存在,则不管password_encryption如何存储它(因为系统无法解密指定的加密密码字符串,以便以不同的格式对其进行加密)。这允许在转储/还原期间重新加载加密密码。
因此,您将无法获得正常用户的原始密码。系统中存储的是原始密码的加密(例如MD5)。如果您已经知道密码,则其加密值将匹配。但是您无法获得生成加密值的密码。这就是加密密码的关键。
作为管理员,您可以更改用户的密码,但不能从加密版本获得密码。
--更新-
要获得用户test密码的加密值,可以执行以下操作:
SELECT * FROM pg_authid WHERE rolname='test';例如:
SELECT rolname, rolpassword FROM pg_authid where rolname='test';生成:
test | SCRAM-SHA-256$4096:O4JqOPBA9uDbytmsgvzcdA==$LN5pfo59nHr19nTDb1LX+21JK/UgQZoWDTFP8Tw2z3E=:Ciq8DY2pz8I2BxGGV2sq3VE6i1E30en0OdDD94Jlij4=https://dba.stackexchange.com/questions/317731
复制相似问题