我可以在psycopg2中使用md5认证吗?
经过两个小时的阅读文档、源代码和帮助帖,我放弃了。我无法让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值,这个值又是用一个共享的连接常量加盐处理的(可以查看源代码)。如果想要复制这种行为,可能需要花费一些功夫。