我可以在psycopg2上使用md5身份验证吗?

时间:2011-07-21 20:02:37

标签: python authentication md5 psycopg2

经过两个小时阅读文档,源代码和帮助主题后,我放弃了。我无法通过md5-string对psycopg2进行身份验证。根据{{​​3}}线程,我除了在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登录(对吗?)。尽管如此,我的unhashed密码工作正常(并且哈希没有)并且我无法在其源代码中找到任何对psycopg2哈希的引用。

帮助?

谢谢!

1 个答案:

答案 0 :(得分:7)

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


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