我正在尝试理解Postgres中角色密码应该如何操作。
https://www.postgresql.org/docs/current/static/sql-createrole.html中对ENCRYPTED / UNENCRYPTED的说明为:
如果提供的密码字符串已经以MD5加密格式存在,则将其加密存储,如原样。
因此,我的未加密密码是:MyPassword。
"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 "ralph@dos32.com"
如果我输入的是48503dfd58720bd5ff35c102065a52d7,那么我就可以登录。
我理解错了什么吗?
PBKDF2
、Rfc2898DeriveBytes
、password_hash
、Bcrypt
、passlib.hash
或类似函数。关键是让攻击者花费大量时间通过暴力破解找到密码。 - zaph