以用户身份连接,并通过JDBC在Postgresql 8.4上设置无密码

我试图通过JDBC驱动程序连接到Ubuntu 10.10中的PostgreSQL 8.4数据库。 我通过jdbc:postgresql:localhost:5433/dbname因为PostgreSQL在非默认端口5433上运行,所以我必须指定端口。

我已经编辑了我的postgresql.conf来设置listen_addresses = "*" 。 我明白,即使它是本地主机,它仍然使用TCP / IP通过JDBC连接。

我的问题是我创build了一个没有密码的用户。 如果我没有使用DriverManager.connect(url)指定密码,则表示需要指定密码进行身份validation。 我尝试的每个密码(包括空string)都无法通过数据库进行身份validation。

我怎么连接?

编辑:如果通过错误的端口连接,错误是:PSQLException:连接被拒绝。 检查主机名和端口是否正确,并且postmaster正在接受TCP / IP连接。 当试图连接正确的端口时,我得到PSQLException:致命:用户“用户”的密码身份validation失败。 这是通过下面接受的答案补救。

Solutions Collecting From Web of "以用户身份连接,并通过JDBC在Postgresql 8.4上设置无密码"

如果您将pg_hba.conf设置为需要md5身份验证,并且用户没有密码,则不会发生身份验证。

 ALTER USER the_user_name PASSWORD 'give_it_a_password'; 

或者,如果你真的必须没有密码,则在pg_hba.conf使用ident或(仅用于localhost,不安全) trust该用户/ db组合的身份验证。 这通常是一个坏主意,只要设置一个密码就好多了。

演示:

 $ psql -q -U postgres postgres postgres=# CREATE USER nopw; CREATE ROLE $ psql -h localhost -U nopw postgres Password for user nopw: [pressed enter] psql: fe_sendauth: no password supplied $ psql -q -U postgres postgres postgres=# ALTER USER nopw PASSWORD 'test'; postgres=# \q $ psql -q -h localhost -U nopw postgres Password for user nopw: [entered 'test' then pressed enter] postgres=> 

连接到你的数据库:

  import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; private final String url = "jdbc:postgresql://localhost:5432/dbname"; private final String driver = "org.postgresql.Driver"; private final String login = "username"; private final String password = ""; private Connection connection = null; //... try { Class.forName(driver); connection = DriverManager.getConnection(url, login, password); } catch (SQLException e) { System.out.print(" Unable set the connection!"); } catch (ClassNotFoundException e) { System.out.print(" Unable to load the driver class!"); }