是否可以创建一个没有密码的jdbc连接(使用postgresql'trust')?

问题描述:

我正在使用jdbc连接到java应用程序中的postgresql数据库(实际上该应用程序是在Groovy中编写的)。我有postgresql设置使用'信任'认证方法。是否可以在不指定密码的情况下打开jdbc连接?当我尝试使用普通的构造函数使用空白密码时,出现是否可以创建一个没有密码的jdbc连接(使用postgresql'trust')?

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 
+0

首先使用psql检查身份验证,但是从您尝试使用JDBC连接的同一台计算机检查身份 - 我感觉只对本地连接启用了“信任”身份验证,并且您尝试从JDBC连接另一台机器。 – 2010-05-14 09:34:46

+0

@Milen“信任”认证(即无密码)也可用于ip连接 – leonbloy 2010-05-14 14:54:39

+0

@leonbloy - 请重新阅读我所写的内容。 – 2010-05-14 16:24:32

是的,可以。

注意Postres JDBC驱动程序始终使用IP套接字(hostpg_hba.conf),即使数据库是在本地机器上,然后psql可以使用本地套接字(在pg_hba.conflocal)。因此,如果psql适用于trust身份验证,并且JDBC不适用,那么您可能应该为IP套接字配置trust身份验证,see documentation

+0

感谢您的链接。那么我可以使用正常的jdbc构造函数并传入一个空密码吗? – mojones 2010-05-14 11:22:25

+0

是的,你可以。它适用于Postgres是否正确配置。 – axtavt 2010-05-14 11:31:42

已经回答了,但:

当您连接使用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) 

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