Java 由于不支持身份验证类型10,无法连接到Postgres DB
我最近试过博士后。在本地安装(PostgreSQL 13.0)。 创建了一个maven项目并使用了Spring数据JPA,工作正常。然而,当我尝试使用Gradle项目时,我无法连接到DB,并不断出现以下错误 org.postgresql.util.PSQLException:身份验证类型10不是 支持。检查您是否已将pg_hba.conf文件配置为 包括客户端的IP地址或子网,并且它正在使用 驱动程序支持的身份验证方案。在 org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:614) ~[postgresql-42.1.4.jar:42.1.4]at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:222) ~[postgresql-42.1.4.jar:42.1.4]at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.1.4.jar:42.1.4]at PgConnection.(PgConnection.java:194) ~[postgresql-42.1.4.jar:42.1.4]at org.postgresql.Driver.makeConnection(Driver.java:450) ~[postgresql-42.1.4.jar:42.1.4]at org.postgresql.Driver.connect(Driver.java:252) ~[postgresql-42.1.4.jar:42.1.4]at java.sql.DriverManager.getConnection(未知源)[na:1.8.0_261] 位于java.sql.DriverManager.getConnection(未知源) [na:1.8.0_261]at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:94) [postgresql-42.1.4.jar:42.1.4] org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:79) [postgresql-42.1.4.jar:42.1.4] 我也尝试过使用JDBCTemplate。不起作用 修改了引用post的pg_hba.cfg文件-不起作用 使用了不推荐使用的库-也不起作用 请给我一个解决这个问题的办法 我的代码和配置:Java 由于不支持身份验证类型10,无法连接到Postgres DB,java,postgresql,spring-boot,gradle,postgresql-13,Java,Postgresql,Spring Boot,Gradle,Postgresql 13,我最近试过博士后。在本地安装(PostgreSQL 13.0)。 创建了一个maven项目并使用了Spring数据JPA,工作正常。然而,当我尝试使用Gradle项目时,我无法连接到DB,并不断出现以下错误 org.postgresql.util.PSQLException:身份验证类型10不是 支持。检查您是否已将pg_hba.conf文件配置为 包括客户端的IP地址或子网,并且它正在使用 驱动程序支持的身份验证方案。在 org.postgresql.core.v3.ConnectionFac
@Configuration
public class DataSourceConfig {
@Bean
public DriverManagerDataSource getDataSource() {
DriverManagerDataSource dataSourceBuilder = new DriverManagerDataSource();
dataSourceBuilder.setDriverClassName("org.postgresql.Driver");
dataSourceBuilder.setUrl("jdbc:postgresql://localhost:5432/postgres");
dataSourceBuilder.setUsername("postgres");
dataSourceBuilder.setPassword("root");
return dataSourceBuilder;
}
}
@Component
public class CustomerOrderJDBCTemplate implements CustomerOrderDao{
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
@Autowired
ApplicationContext context;
public void setDataSource() {
//Getting Bean by Class
DriverManagerDataSource dataSource = context.getBean(DriverManagerDataSource.class);
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(this.dataSource);
}
@Override
public Customer create(Customer customer) {
setDataSource();
String sql = "insert into CustomerOrder (customerType, customerPayment) values (?, ?)";
//jdbcTemplateObject.update(sql, customerOrder.getCustomerOrderType(), customerOrder.getCustomerOrderPayment());
KeyHolder holder = new GeneratedKeyHolder();
jdbcTemplateObject.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, customer.getType());
ps.setString(2, customer.getPayment());
return ps;
}
}, holder);
long customerId = holder.getKey().longValue();
customer.setCustomerID(customerOrderId);
return customer;
}
}
依赖关系
implementation('org.springframework.boot:spring-boot-starter-web')
compile("org.springframework.boot:spring-boot-devtools")
compile(group: 'org.postgresql', name: 'postgresql', version: '42.1.4')
compile("org.springdoc:springdoc-openapi-ui:1.4.1")
compile("org.springframework:spring-jdbc:5.2.5.RELEASE")
密码\u加密
设置如下:
postgres=# show password_encryption;
password_encryption
---------------------
scram-sha-256
(1 row)
通过将
password\u encryption
设置为scram-sha-256
(这是v13中的默认值),您还可以获得scram-sha-256
身份验证,即使您在pg\u hba.conf
中有md5
现在,您在客户端使用的是一个旧的JDBC驱动程序版本,它不支持这种身份验证方法,尽管三年前PostgreSQL在v10中引入了这种方法
您应该升级JDBC驱动程序。另一种方法是将
password\u encryption
设置回md5
,但随后您必须重置所有密码,并以较低的安全性生活。我想解决此问题的方法是使用9.6版。
更改版本后,它工作正常。我通过在PostgreSQL第13版中应用以下步骤解决了类似问题:
scram-sha-256
更改为md5
文件:C:\Program Files\PostgreSQL\13\data\pg_hba.conf
托管所有0.0.0.0/0 md5
使用密码“root”更改角色postgres
listen\u addresses='*'
环境
文件:C:\ProgramFiles\PostgreSQL\13\data\PostgreSQL.conf
在pom.xml中为Postgres使用最新的maven依赖项
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.example
根据,支持的用于SCRAM-SHA-256
加密的JDBC驱动程序为42.2.0或更高版本。
就我而言,司机是41.1.1。将其更改为42.2.0或更高版本。那帮我修好了
(Maven,pom.xml
):
org.postgresql
postgresql
42.2.0
将pg_hba.conf中的方法更改为“信任”在12.6版中工作正常。。。只需降级PostgreSQL您可能需要检查您正在运行的Postgres版本。如果版本通过spring父级指向,Migh需要更新spring版本。
在我的例子中:因为现在的博士后是v13<代码>修改的spring父版本:在1.4上;使其与2.14相匹配。最后更新maven dependency并重新运行应用程序
。这解决了问题。在目录中获取pg_hba.conf文件
C:\ProgramFiles\PostgreSQL\13\data\pg_hba.conf
只需将列方法下的scram-sha-256更改为trust即可
这对我有用
显示什么密码\u加密代码>给你什么?如果设置为SCRAM-SHA-256
,则需要更新的JDBC硬盘。postgres=#显示密码(加密);密码\u加密-----------------scram-sha-256(1行)只是好奇。。如何使用maven项目而不是gradle项目进行连接。不,这与您在JDBC驱动程序上运行的内容无关。我的maven项目中使用的驱动程序与上面相同(org.postgresql.driver)。这就是为什么我在我的gradle项目中使用了相同的方法。好吧,升级这两种方法的驱动程序。升级驱动程序也为我做了同样的工作。这降低了驱动程序的安全性。您可能需要考虑升级您的JDBC驱动程序。密码仍然是用<代码> RAD-SA-256 < /代码>加密的,在所描述的更改之后…知道为什么吗?谢谢别忘了代码>位于ALTER ROLE语句的末尾。我花了一段时间才意识到对我来说,作为最后一步,我必须更改用户
,即使用密码“root”更改用户postgres代码>请编辑您的答案并添加一些解释。不安全,绝对不适合在实际系统中持续使用,但出于我的目的(不需要重新配置加密或用户密码的临时测试),这是一种方便的解决方法!奇怪的;我也有同样的问题
<groupId>org.example</groupId>
<artifactId>postgresJDBC</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven.compiler.source>${java.version}</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.18</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.0</version>
</dependency>