5

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

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

我的问题是我创建了一个没有密码的用户。如果我没有使用 指定密码DriverManager.connect(url),则会出错,表明我需要指定密码进行身份验证。我尝试的每个密码(包括空字符串)都无法通过数据库进行身份验证。

我该如何连接?

编辑:如果通过错误的端口连接,错误是:PSQLException:连接被拒绝。检查主机名和端口是否正确以及 postmaster 是否接受 TCP/IP 连接。尝试在正确的端口上连接时,我收到 PSQLException: FATAL: password authentication failed for user "user"。这可以通过下面接受的答案来解决。

4

2 回答 2

13

如果您已pg_hba.conf设置为要求md5身份验证并且用户没有密码,则不会进行身份验证。

ALTER USER the_user_name PASSWORD 'give_it_a_password';

或者,如果您确实必须没有密码,则对该用户/数据库组合使用ident或(仅对于本地主机,不安全)身份验证。这通常是个坏主意,最好只设置一个密码。trustpg_hba.conf

演示:

$ 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=> 
于 2012-11-14T00:19:20.600 回答
1

连接到您的数据库:

    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!");
    }
于 2012-11-13T22:34:45.440 回答