【问题标题】:Postgres: MD5 Password / Plain passwordPostgres:MD5 密码/普通密码
【发布时间】:2018-01-05 19:47:32
【问题描述】:

我试图了解角色密码在 Postgres 中应该如何操作。

https://www.postgresql.org/docs/current/static/sql-createrole.html 表示加密/未加密

如果显示的密码字符串已经是 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 则可以登录。

我不明白什么?

【问题讨论】:

  • MD5 不是加密,因为散列函数不是加密,它们是单向不可逆方法。加密假设解密,使用正确的密钥加密数据可以返回到我们未加密的状态。
  • MD5 不是安全的或可接受的密码验证器。当保存密码验证器时,仅使用散列函数是不够的,并且仅添加盐对提高安全性无济于事。而是使用随机盐迭代 HMAC 约 100 毫秒的持续时间,然后将盐与哈希一起保存。使用PBKDF2、Rfc2898DeriveBytes、password_hash、Bcrypt、passlib.hash 等函数或类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。
  • 虽然您在两个 cmets 中都绝对正确,但有两个考虑因素:1) 我仅限于 Postgres 提供给我的设施。 2) 我正在保护的数据没有那么有价值,因此花时间以最高级别的安全性保护它是不值得的。

标签: postgresql md5 role


【解决方案1】:

Postgresql 散列密码具有 md5 前缀:

md548503dfd58720bd5ff35c102065a52d7

【讨论】:

【解决方案2】:

@zerkms 提供的答案部分正确。它引导我找到了正确的答案。

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

【讨论】:

  • 只是一个链接是不够的,它不能完全帮助未来的读者,可能会失效。
  • 好吧......对于未来的读者,我指出的文章说:pghash = "md5" + hashlib.md5(password + username).hexdigest()
【解决方案3】:

为 PostgreSQL 创建 md5 密码,公式为:

"md5" + md5(password + username)

这里有 3 种方法可以创建一个,其中用户名是“admin”,密码是“password123”...

Linux:

# echo -n "md5"; echo -n "password123admin" | md5sum | awk '{print $1}'
md53f84a3c26198d9b94054ca7a3839366d

注意:-n 对于避免在哈希中包含换行符至关重要!

MacOS:

➜ echo -n "md5"; md5 -qs "password123admin"                                                                                                                                                                                   
md53f84a3c26198d9b94054ca7a3839366d

Python 2:

>>> import hashlib
>>> print("md5" + hashlib.md5("password123" + "admin").hexdigest())
md53f84a3c26198d9b94054ca7a3839366d

Python 3:

同上,但使用二进制字符串

print("md5" + hashlib.md5(b"password123" + b"admin").hexdigest())

【讨论】:

    【解决方案4】:

    在 GCP Cloud SQL 上使用 Postgres11。 Gitlab版本gitlab-ee 13.3.4 Omnibus install

    # gitlab-ctl pg-password-md5 gitlab_user
    Enter password:
    Confirm password:
    
    

    和

    # echo -n <password for gitlab_user>gitlab_user | md5sum
    

    是等价的。

    注意:我的数据库用户是gitlab_user

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多