因连接认证配置错误导致连接失败的问题
问题现象
连接数据库报错。
1. Exception in thread "main" org.postgresql.util.PSQLException: [A.B.C.D:40822/A.B.C.D:20088] FATAL: Forbid remote connection with trust method!
2. at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:636)
3. at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:172)
4. at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:254)
5. at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:53)
6. at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:270)
7. at org.postgresql.Driver.makeConnection(Driver.java:568)
8. at org.postgresql.Driver.connect(Driver.java:317)
9. at java.sql.DriverManager.getConnection(DriverManager.java:664)
10. at java.sql.DriverManager.getConnection(DriverManager.java:247)
11. at Main.run(Main.java:88)
12. at Main.main(Main.java:25)
定位方法
报错信息内容为向监控地址A.B.C.D发起连接由于认证为trust模式被禁止。
数据库连接认证配置文件为 pg_hba.conf,查看远程登陆认证配置:
1. # TYPE DATABASE USER ADDRESS METHOD
3. # "local" is for Unix domain socket connections only
4. local all all trust
5. # IPv4 local connections:
6. host all all 127.0.0.1/32 trust
7. host all all A.B.C.D/32 trust
8. # IPv6 local connections:
9. host all all ::1/128 trust
确认确实使用了trust的远程登陆认证模式。
问题根因
数据库不支持以trust模式远程登陆。
解决方案
数据库不支持以trust模式远程登陆,需要修改为sha256、md5等。
1. # TYPE DATABASE USER ADDRESS METHOD
3. # "local" is for Unix domain socket connections only
4. local all all trust
5. # IPv4 local connections:
6. host all all 127.0.0.1/32 trust
7. host all all A.B.C.D/32 sha256
8. # IPv6 local connections:
9. host all all ::1/128 trust
