0

我在大学里使用了两个工具,它们都使用同一个 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++ 工具总是尝试使用缩进身份验证方法。(或者是 db..?) libpqxx 中是否有任何特殊情况我需要注意?

4

1 回答 1

0

我想你的意思是peer当你写的时候identidentlocal连接上没有什么意义。但是,这不是匹配的行。

怎么可能,尽管给出了密码,但 C++ 工具总是尝试使用缩进身份验证方法。(或者是 db..?) libpqxx 中是否有任何特殊情况我需要注意?

数据库服务器选择身份验证方法并要求客户端使用所需的方法进行身份验证。

密码是未使用的,如果它不要求它甚至永远不会发送到服务器,就像在ident身份验证中一样。如果要密码验证,请将服务器设置为请求md5验证方法。

我最近在邮件列表中建议libpq应该WARNING在提供密码但由于服务器配置而被忽略时发出。我还没有说服任何人这是一个好主意。

于 2014-12-11T03:41:15.153 回答