生成postgresql用户密码

Cpp*_*ner 12 python postgresql

我试图生成postgres使用hashlibPython的密码.

>>> 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).


Clo*_*eto 5

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)