我试图使用Python中的hashlib
为postgres
生成密码。
>>> import hashlib
>>> hashlib.md5("psql123").hexdigest()
2636d1ddc54901f98d011ffe050c0eb7
但是postgresql需要md5
前缀,所以
sudo -u postgres psql
ALTER USER postgres PASSWORD 'md52636d1ddc54901f98d011ffe050c0eb7';
但是,如果我使用psql123
作为密码,身份验证将失败。
如果我使用passlib
,我很好。见http://pythonhosted.org/passlib/lib/passlib.hash.postgres_md5.html
使用psql123
作为密码执行以下操作是可以的。
ALTER USER postgres PASSWORD 'md556074e7318bd4cee558faab0678a2fad';
我不明白passlib
中的警告想说什么。可以为postgres
用户使用这个散列吗?另外,在文档中,它在哪里说username
必须是输入的一部分?
我想这就是为什么postgres
不能理解hashlib
的结果。作为LDAP用户,我可以在shell中生成密码。postgres有内置的命令吗?psycopg2
有吗?看起来不是
对于其他用途,请使用^{} 模块。
将其作为超级用户安装到目标数据库中:
Postgres的密码散列非常接近您所做的,它只需要包含用户名,如下所示:
另外,postgres文档根本没有记录这种散列格式,似乎认为管理员很少直接处理这些散列:(据我所知,没有生成这些散列的内置方法。如果提供给
ALTER USER
命令的密码不符合postgres散列格式,那么它假定密码没有被散列,并在内部按照CREATE ROLE加密关键字的文档进行处理。(这是一个有缺陷的行为,因为如果散列依赖于用户名,这意味着散列不能在不同的帐户之间复制和粘贴,在重命名帐户时中断,并且(猜测熵)只有~6位有效的salt)。passlib文档顶部关于散列的警告可能更清楚。它的目的是警告浏览passlib文档的人:1)这个散列非常不安全;2)他们不应该在自己的应用程序中使用它;3)它只适合于使用postgres用户帐户,因为它是postgres对自己帐户最强大(也是唯一)的哈希格式。
(如果您试图使用postgres散列自己应用程序用户帐户的密码,我强烈建议Clodoaldo通过pgcrypto扩展使用bcrypt)。
相关问题 更多 >
编程相关推荐