【问题标题】:Can I use md5 authentication with psycopg2?我可以在 psycopg2 中使用 md5 身份验证吗?
【发布时间】:2011-10-10 13:19:00
【问题描述】:

在阅读文档、源代码和帮助线程两个小时后,我放弃了。我无法让 psycopg2 使用 md5 字符串进行身份验证。根据this 线程,除了在pg_hba.conf 中启用 md5-auth 之外,我不需要做任何事情。

这是我目前的pg_hba.conf

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               md5
host    all         all         127.0.0.1/32          md5
host    all         all         ::1/128               md5
host    all         all         0.0.0.0/0             md5

我像这样使用 psycopg2:

psycopg2.connect(host='localhost', port=5433, user='me', password='md5xxxx').cursor()

这给出了:

psycopg2.OperationalError: FATAL:  password authentication failed for user "me"

当然,给定的密码与 pg_authid.rolpassword 匹配。

根据pg_hba.conf,我只能使用 md5-auth 登录(对吗?)。尽管如此,我未散列的密码仍然可以正常工作(而散列则不行),并且我无法在其源代码中找到对 psycopg2 散列它的任何引用。

帮助?

谢谢!

【问题讨论】:

    标签: python authentication md5 psycopg2


    【解决方案1】:

    Psycopg2 is a wrapper around libpq,即 Postgres 客户端库,它已经实现了这一点。无需散列密码。在通过网络发送之前,它将被散列(通过 libpq)。


    值得注意的是,libpq 实际上发送了用用户名加盐的密码的 MD5 总和,以及用共享连接常量加盐的 MD5 总和的 MD5 总和(参见the source here)。复制这种行为需要一些工作。

    【讨论】:

    • 好的,谢谢!所以我猜不可能使用 md5 字符串进行身份验证?
    • 正确,如果您传入密码的 MD5 哈希,libpq 将计算该哈希的 MD5 哈希并通过网络发送。另请参阅上面的编辑。
    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2010-09-14
    • 2019-02-14
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多