是否可以在没有密码的情况下创建jdbc连接(使用postgresql'trust')?

时间:2010-05-14 09:11:33

标签: java postgresql jdbc

我正在使用jdbc连接到java应用程序中的postgresql数据库(实际上该应用程序是用Groovy编写的)。我有postgresql设置使用'信任'身份验证方法。是否可以在不指定密码的情况下打开jdbc连接?当我尝试使用带有空密码的普通构造函数时,它会失败并带有

Exception in thread "Thread-2" org.postgresql.util.PSQLException: FATAL: password authentication failed for user "myuser"

即使从命令行开始,这也可以正常工作

psql -U myuser mydatabase
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
      \h for help with SQL commands
      \? for help with psql commands
      \g or terminate with semicolon to execute query
      \q to quit

3 个答案:

答案 0 :(得分:5)

是的,你可以。

请注意,Postres JDBC驱动程序始终使用IP套接字(host中的pg_hba.conf),即使数据库位于本地计算机上,然后psql也可以使用本地套接字(localpg_hba.conf)。因此,如果psql使用trust身份验证而JDBC不能,那么您可能应该为IP套接字see documentation配置trust身份验证。

答案 1 :(得分:3)

已经回答但是:

使用psql客户端程序连接时,如果没有指定主机(-h),则默认使用本地套接字(至少在Linux的)。相反,在JDBC中,您将使用 TCP / IP 套接字。然后,要检查连接问题,您应该使用在JDBC中使用的相同设置来调用psql,包括主机。

例如

 psql -U myuser -h 127.0.0.1 mydatabase    # uses TCP/IP

不一样
 psql -U myuser mydatabase      # uses local socket (non TCP/IP)

答案 2 :(得分:0)

至少包括版本3.1的GlassFish有一个issue with specifying empty JDBC passwords