是否可以创建一个没有密码的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
答
是的,可以。
注意Postres JDBC驱动程序始终使用IP套接字(host
在pg_hba.conf
),即使数据库是在本地机器上,然后psql
可以使用本地套接字(在pg_hba.conf
local
)。因此,如果psql
适用于trust
身份验证,并且JDBC不适用,那么您可能应该为IP套接字配置trust
身份验证,see documentation。
答
已经回答了,但:
当您连接使用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)
首先使用psql检查身份验证,但是从您尝试使用JDBC连接的同一台计算机检查身份 - 我感觉只对本地连接启用了“信任”身份验证,并且您尝试从JDBC连接另一台机器。 – 2010-05-14 09:34:46
@Milen“信任”认证(即无密码)也可用于ip连接 – leonbloy 2010-05-14 14:54:39
@leonbloy - 请重新阅读我所写的内容。 – 2010-05-14 16:24:32