org.postgresql.util.PSQLException:致命:主机没有pg_hba.conf条目

Sil*_*aju 40 postgresql

我正在尝试使用Spring JDBC模板连接到远程位置的PostgreSQL数据库.我正进入(状态

org.postgresql.util.PSQLException:致命:主机"139.126.243.71"没有pg_hba.conf条目,用户"guest",数据库"masterdb",SSL关闭错误

我无法访问远程位置的pg_hba.conf文件.

这是我在spring servlet.xml中给出的配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://100.64.35.52":5432/masterdb"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我们可以通过提供任何财产来解决问题吗?

Ami*_*mit 51

似乎DB服务器不允许SSL关闭连接,您必须启用它.将URL更改jdbc:postgresql://100.64.35.52":5432/masterdbjdbc:postgresql://100.64.35.52":5432/masterdb?sslmode=require

http://www.postgresql.org/docs/9.1/static/libpq-ssl.html上查看有关ssl模式的模式详细信息

  • 修复它以连接到heroku postgres实例. (3认同)

Par*_*ian 25

您必须应用更改以进行连接:

在"C:\ Program Files(maby x86)\ PostgreSQL(您的版本)\ data"中

在"postgresql.conf"文件中:

检查"listen_addresses"be ='*'(默认情况下,它在某些postgres版本中是localhost)如果不是,则必须将其更改为"*".这是听所有地址的原因.

在"pg_hba.conf"文件中:

添加新行:

host all all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

(使用上面的行更好)或

host guest masterdb 139.126.243.71 md5
Run Code Online (Sandbox Code Playgroud)

最后,ssl模式非常重要.在你的网址末尾添加打击命令:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Run Code Online (Sandbox Code Playgroud)

以豆为例

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://100.64.35.52":5432/masterdb?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

  • 我根本没有更改pg_hba.conf文件。只需添加?ssl = true&sslfactory = org.postgresql.ssl.NonValidatingFactory就可以为我工作。 (2认同)

Key*_*r00 5

错误说明

该文件pg_hba.conf(基于主机的认证配置文件)用于控制客户端认证。该文件位于数据库集群的数据目录中。

该错误java.sql.SQLException: FATAL: no pg_hba.conf entry for host "<your-host-ip>", user "<postgres-user>", database "<db-name>", SSL off意味着 Postgres 接受 SSL 连接,但您尝试在没有 SSL 的情况下进行连接。

安全连接

如果在 SSL 连接启动期间从客户端请求证书,则表示 DBA 已设置了 中的clientcert参数pg_hba.conf。请注意,如果clientcert未指定(或设置为 0),则服务器不会坚持提供客户端证书。

检查数据库服务器是否使用 SSL

在尝试从 Java 访问启用 SSL 的服务器之前,请确保您可以通过psql.

如果要在给定端口与给定用户连接:

$ psql -h <server-ip> -p <server-port> -d <db-name> -U <user>
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在默认端口与当前用户连接:

$ psql -h <server-ip>
Run Code Online (Sandbox Code Playgroud)

如果您建立了 SSL 连接,您应该会看到这样的输出:

$ psql -h <server-ip> -d <db-name> -U <user>
psql (11.2, Server 9.6.5)

SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Run Code Online (Sandbox Code Playgroud)

请注意,最后一行包含“SSL 连接”。

JDBC 连接参数

  • ssl如果服务器需要安全连接,则必须设置。请注意,ssl=true或都可以ssl使用,但ssl=true建议用于即将发布的 Postgres 版本。
  • sslfactory 提供在建立 SSL 连接时用作 SSLSocketFactory 的类名。

JDBC 驱动程序提供了一个选项来建立 SSL 连接而不进行任何验证(但它有风险!)。

非验证连接是通过SSLSocketFactory驱动程序提供的自定义类建立的。设置连接 URL 参数sslfactory=org.postgresql.ssl.NonValidatingFactory将关闭所有 SSL 验证。

这是我的情况,也是为什么我也遇到了与您相同的错误。因此,要建立连接,我有:

jdbc:postgresql://<ip-address>:<port>/<db-name>?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Run Code Online (Sandbox Code Playgroud)

参考