我正在尝试使用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/masterdb为 jdbc:postgresql://100.64.35.52":5432/masterdb?sslmode=require
在http://www.postgresql.org/docs/9.1/static/libpq-ssl.html上查看有关ssl模式的模式详细信息
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(基于主机的认证配置文件)用于控制客户端认证。该文件位于数据库集群的数据目录中。
该错误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)
参考
| 归档时间: |
|
| 查看次数: |
41735 次 |
| 最近记录: |