我在大学里使用两种工具,它们都使用相同的postgres数据库。 用Java编写的那个使用jdbc-driver,并且工作得很好。
用C ++编写的第二个有一些困难。它给了我以下错误
Ident authentication failed for user "xyz"
连接字符串看起来像这样
dbname=myDB user=xyz hostaddr=127.0.0.1 port=5432 connect_timeout=10 password=myPW
我检查了10次这样的值,两种应用程序都完全相同。我以为它可能是pg_hba.cfg。所以我尝试了很多,最后打开了所有大门:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
local all postgres ident
local all all password
# IPv4 local connections:
host all all 192.168.185.0/24 trust
host all postgres 127.0.0.1/32 ident
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 ident
尽管有密码,但C ++工具总是尝试使用缩进验证方法。 (或者它是数据库..?) 在libpqxx中是否有任何特殊情况我需要留意?
答案 0 :(得分:0)
我认为你写peer
时的意思是ident
。 ident
连接上的local
毫无意义。但是,这不是匹配的线。
尽管给出了密码,C ++工具总是尝试使用缩进身份验证方法,但是怎么可能呢? (或者它是数据库..?)libpqxx中是否有任何特殊情况我需要注意?
数据库服务器选择auth方法并要求客户端使用所需方法进行身份验证。
密码未使用,如果没有要求,则永远不会发送到服务器,如ident
身份验证。如果要进行密码验证,请将服务器设置为请求md5
验证方法。
我最近在邮件列表上建议libpq
在提供密码时发出WARNING
但由于服务器配置而被忽略。我还没有说服任何人这是一个好主意。