Postgres:MD5密码/普通密码

问题描述:

我想了解密码在Postgres中应该如何操作。Postgres:MD5密码/普通密码

https://www.postgresql.org/docs/current/static/sql-createrole.html说,对于加密/ UNENCRYPTED

如果目前的口令字符串已经是用MD5加密的格式,那么它存储加密,不被

所以我的未加密的密码是:我的密码 。

“MyPassword输入” 的MD5哈希48503dfd58720bd5ff35c102065a52d7

如果我做

-- See https://www.postgresql.org/docs/9.6/static/sql-alterrole.html 
ALTER ROLE "MeOhMy" 
LOGIN 
PASSWORD '48503dfd58720bd5ff35c102065a52d7' 
; 

,然后尝试用 “MyPassword输入” 做

sudo -u postgres psql meohmy -h 127.0.0.1 -d meohmy_development 

我的时候,当然,第一得到提示输入我的sudo密码,然后通过Postgres提示“密码为meohmy”

如果我进入MyPassword输入我得到

FATAL: password authentication failed for user "[email protected]" 

如果我进入,相反,48503dfd58720bd5ff35c102065a52d7然后我就可以登录。

什么我不理解?

+0

MD5不加密,因为散列函数不是加密的,它们是单向不可逆的方法。加密假定解密,即用正确的密钥加密数据可以返回到它的我们未加密的状态。 – zaph

+0

MD5不是安全或可接受的密码验证程序。当保存密码验证者只使用哈希函数是不够的,只是添加一个盐没有提高安全性。相反,用随机盐迭代HMAC约100ms持续时间,然后用散列表保存盐。使用诸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash'或类似函数的函数。关键是要让攻击者花费大量时间通过强力查找密码。 – zaph

+0

虽然你的评论绝对正确,但有两点需要注意: 1)我仅限于Postgres给我的设施。 2)我所保护的数据并不是那么有价值,所以花时间保护它以最高等级的安全性是不值得的。 – RalphShnelvar

PostgreSQL的哈希密码有md5前缀:

md548503dfd58720bd5ff35c102065a52d7 
+0

这是在哪里记录!!?!所有我找到的是https://stackoverflow.com/questions/14918763/generating-postgresql-user-password – RalphShnelvar

+0

@RalphShnelvar https://www.postgresql.org/docs/current/static/catalog-pg-authid.html –

由@zerkms提供的答案是部分正确。它使我找到了正确的答案。

Generating postgresql user password提供的答案是适合我的答案。

+0

只是一个链接不足,它不能完全帮助未来的读者,并可能会失效。 – zaph

+0

好的...对于未来的读者,我指出的文章说: 'pghash =“md5”+ hashlib.md5(密码+用户名).hexdigest()' – RalphShnelvar