Cpp*_*ner 12 python postgresql
我试图生成postgres
使用hashlib
Python的密码.
>>> import hashlib
>>> hashlib.md5("psql123").hexdigest()
2636d1ddc54901f98d011ffe050c0eb7
Run Code Online (Sandbox Code Playgroud)
但是postgresql需要md5
前缀,所以那么
sudo -u postgres psql
ALTER USER postgres PASSWORD 'md52636d1ddc54901f98d011ffe050c0eb7';
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用psql123
密码,身份验证将失败.
如果我使用passlib
,我很好.请参阅http://pythonhosted.org/passlib/lib/passlib.hash.postgres_md5.html
使用psql123
密码执行以下操作是可以的.
ALTER USER postgres PASSWORD 'md556074e7318bd4cee558faab0678a2fad';
Run Code Online (Sandbox Code Playgroud)
我不明白passlib
想要说什么警告.是否可以将此哈希用于postgres
用户?另外,文档中的哪些内容username
必须是输入的一部分?
我认为这就是为什么postgres
无法理解结果的原因hashlib
.作为LDAP用户,我可以在shell中生成密码.postgres有内置命令吗?是否psycopg2
有?它看起来没有.
Eli*_*ins 19
Postgres的密码哈希非常接近你所做的,它只需要包含如下用户名:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
Run Code Online (Sandbox Code Playgroud)
AFAIK,postgres文档根本没有真正记录这种哈希格式,并且似乎假设管理员很少直接处理这些哈希:(没有内置的方法来生成我知道的这些哈希.如果密码提供给ALTER USER
命令不符合postgres散列格式,它假定密码没有被散列,并在内部处理 - 根据CREATE ROLE的ENCRYPTED关键字的文档.(恕我直言,这是一个有缺陷的行为,因为如果hash取决于用户名,这意味着哈希不能在不同帐户之间复制和粘贴,在重命名帐户时中断,并且(猜测熵)只有~6位有效盐).
passlib的hash文档顶部的警告可能更清晰.它的目的是警告浏览passlib文档的人1)这个哈希是非常不安全的,2)他们不应该将它用于他们自己的应用程序,3)它只适合于使用的目的postgres用户帐户,因为它是postgres支持自己帐户的最强(也是唯一)哈希格式.
(如果您尝试使用postgres来为您自己的应用程序的用户帐户哈希密码,我强烈要求Clodoaldo建议通过pgcrypto扩展名来使用bcrypt).
alter user postgres ENCRYPTED password 'psql123';
Run Code Online (Sandbox Code Playgroud)
对于其他用途,请使用该pgcrypto
模块.
create table "user" (name text, password_hash text);
insert into "user" (name, password_hash) values
('u1', crypt('psql123', gen_salt('bf')));
select * from "user";
name | password_hash
------+--------------------------------------------------------------
u1 | $2a$06$SeH4u4aRtT2Zr39er4eSiONT/0IBQHYMbQXn2RauPJKCYdNX1.58G
select name, password_hash = crypt('psql123', password_hash)
from "user"
;
name | ?column?
------+----------
u1 | t
Run Code Online (Sandbox Code Playgroud)
以超级用户身份登录目标数据库安装:
create extension pgcrypto;
Run Code Online (Sandbox Code Playgroud)