postgres / libpqxx:通过密码拒绝身份验证

时间:2014-12-10 14:37:42

标签: java c++ postgresql libpq libpqxx

我在大学里使用两种工具,它们都使用相同的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中是否有任何特殊情况我需要留意?

1 个答案:

答案 0 :(得分:0)

我认为你写peer时的意思是identident连接上的local毫无意义。但是,这不是匹配的线。

  

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

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

密码未使用,如果没有要求,则永远不会发送到服务器,如ident身份验证。如果要进行密码验证,请将服务器设置为请求md5验证方法。

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