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

时间:2014-09-03 09:41:03

标签: 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>

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

6 个答案:

答案 0 :(得分:44)

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

http://www.postgresql.org/docs/9.1/static/libpq-ssl.html

检查有关ssl模式的模式详细信息

答案 1 :(得分:21)

您必须将以下更改应用于连接:

导航至以下位置C:\Program Files (maybe x86)\PostgreSQL\(your version)\data

postgresql.conf 档案:

检查listen_addresses be = *(默认情况下,某些postgres版本中的localhost)如果不是,则必须将其更改为*。它用于监听所有接口。

pg_hba.conf 档案:

添加新行:

host all all 0.0.0.0/0 md5

(使用上面的行更好) 或

host guest masterdb 139.126.243.71 md5

最后,ssl模式的开启非常重要。为此,在您的网址末尾添加以下命令:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

以豆为术语

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

答案 2 :(得分:2)

合并设置

我尝试了@ craig-ringer提供的建议

jdbc:postgresql://100.64.35.52":5432/masterdb?ssl=true

由@amit提供

jdbc:postgresql://100.64.35.52":5432/masterdb?sslmode=require

既没有奏效。但是当我把它们结合起来时:

jdbc:postgresql://100.64.35.52":5432/masterdb?ssl=true&sslmode=require

有效。

答案 3 :(得分:1)

错误说明

文件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>

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

$ psql -h <server-ip>

如果建立了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)

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

JDBC连接参数

    如果服务器需要安全连接,则必须设置
  • ssl。请注意,ssl=truessl都可以使用,但建议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

参考

答案 4 :(得分:0)

请参阅我的回答here,基本上必须将user / pwd放入url属性

url="jdbc:postgresql://server:port/mydb?user=fred&amp;password=secret"

答案 5 :(得分:0)

您必须具有root访问权限编辑pg_hba.conf

  • 转到 root 用户
  • 编辑/var/lib/pgsql/12/data/pg_hba.conf

托管所有139.126.243.71/32信任

  1. 重新启动Postgres [service postgresql-12.service restart]。