我正在使用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
答案 0 :(得分:5)
是的,你可以。
请注意,Postres JDBC驱动程序始终使用IP套接字(host
中的pg_hba.conf
),即使数据库位于本地计算机上,然后psql
也可以使用本地套接字(local
在pg_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。