我可以在psycopg2中使用md5认证吗?

7 投票
1 回答
4655 浏览
提问于 2025-04-16 22:01

经过两个小时的阅读文档、源代码和帮助帖,我放弃了。我无法让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认证登录(对吧?)。不过,我的未加密密码可以正常工作(而加密的却不行),而且我在psycopg2的源代码中找不到任何关于它进行加密的参考。

有人能帮忙吗?

谢谢!

1 个回答

7

Psycopg2是一个封装了libpq的工具,也就是Postgres的客户端库,它已经实现了这个功能。所以你不需要自己去加密你的密码。密码会在发送之前由libpq自动加密。


值得注意的是,libpq实际上会发送你密码的MD5值,这个值是用你的用户名加盐处理过的,同时还会发送这个MD5值的MD5值,这个值又是用一个共享的连接常量加盐处理的(可以查看源代码)。如果想要复制这种行为,可能需要花费一些功夫。

撰写回答