我能否在psycopg2中使用MD5身份验证?

7

阅读文件、源代码和帮助帖子两个小时后,我放弃了。我无法让psycopg2通过md5字符串进行身份验证。根据帖子,除了启用pg_hba.conf中的md5认证之外,我似乎不必执行任何其他操作。

这是我当前的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的源代码中找到任何关于哈希它的参考。

有什么帮助吗?

谢谢!

1个回答

7

Psycopg2是libpq的封装,也就是Postgres客户端库,已经实现了这一点。不需要对密码进行哈希处理,它将在发送到服务器之前(由libpq)进行哈希处理。


值得注意的是,libpq实际上发送了您的密码的MD5摘要,并将其与您的用户名一起进行加盐,以及该MD5摘要的MD5摘要与共享连接常量进行加盐(请参见此处的源代码)。要复制该行为需要一些工作。

好的,谢谢!所以我猜用md5字符串进行身份验证是不可能的? - Martijn
如果您传递密码的MD5哈希值,libpq将计算该哈希值的MD5哈希值并将其发送到网络上。另请参见我上面的编辑。 - ig0774

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接