2010-05-14 45 views
7

我正在使用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

回答

4

是的,可以。

注意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

1

已經回答了,但:

當您連接使用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) 
相關問題