由于不支持身份验证类型 10,无法连接到 Postgres DB
Unable to connect to Postgres DB due to the authentication type 10 is not supported
我最近尝试了 Postgres。将其安装在本地(PostgreSQL 13.0)。
创建了一个 Maven 项目并使用了 Spring Data JPA,工作正常。而当我尝试使用 Gradle 项目时,我无法连接到数据库并不断收到以下错误。
org.postgresql.util.PSQLException: The authentication type 10 is not
supported. Check that you have configured the pg_hba.conf file to
include the client's IP address or subnet, and that it is using an
authentication scheme supported by the driver. at
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
org.postgresql.jdbc.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(Unknown Source) [na:1.8.0_261]
at java.sql.DriverManager.getConnection(Unknown Source)
[na:1.8.0_261] at
org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:94)
[postgresql-42.1.4.jar:42.1.4] at
org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:79)
[postgresql-42.1.4.jar:42.1.4]
我也尝试过使用 JDBCTemplate。不起作用
修改了引用 this post 的 pg_hba.cfg 文件 - 不起作用
使用已弃用的 Lib of - 也不起作用。
请给我一个解决这个问题的建议。
我的代码和配置:
@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")
password_encryption
是这样设置的:
postgres=# show password_encryption;
password_encryption
---------------------
scram-sha-256
(1 row)
通过将 password_encryption
设置为 scram-sha-256
(这是 v13 中的默认值),您还可以获得 scram-sha-256
身份验证,即使您在 [=14] 中拥有 md5
=].
现在您在客户端使用不支持该身份验证方法的旧 JDBC 驱动程序版本,即使 PostgreSQL 在三年前的 v10 中引入了它。
您应该升级 JDBC 驱动程序。另一种方法是将 password_encryption
设置回 md5
,但随后您将不得不重置所有密码并以较低的安全性生活。
我想这个问题的解决方案是使用 9.6 版。
改版本后就正常了
我通过在 PostgreSQL 版本 13:
中应用以下步骤解决了类似问题
- 在
postgresql.conf
中将password_encryption
更改为md5
Windows: C:\Program Files\PostgreSQL\data\postgresql.conf
GNU/Linux: /etc/postgresql/13/main/postgresql.conf
- 在
pg_hba.conf
中将scram-sha-256
更改为md5
Windows: C:\Program Files\PostgreSQL\data\pg_hba.conf
GNU/Linux: /etc/postgresql/13/main/pg_hba.conf
host all all 0.0.0.0/0 md5
更改密码(此恢复密码为md5格式)。
示例:ALTER ROLE postgres WITH PASSWORD 'root'
;
如果您在非生产环境中工作,请确保在 postgresql.conf
中设置 listen_addresses = '*'
。
在 pom.xml
中对 Postgres 使用最新的 Maven 依赖项
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<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>
如果你使用的是 postgresql 9.1+,你必须检查你的 maven 依赖关系,那么你的依赖关系应该像上面那样
要了解 Maven 依赖性,请参阅此 link How do you add PostgreSQL Driver as a dependency in Maven?
根据 wiki,SCRAM-SHA-256
加密支持的 JDBC 驱动程序为 42.2.0 或更高版本。
在我的例子中,驱动程序是 41.1.1。将其更改为 42.2.0 或更高版本。这对我来说已经解决了。
(Maven, pom.xml
):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.0</version>
</dependency>
在 pg_hba.conf
中将方法更改为“信任”
在 12.6 版本上工作正常...只需降级 PostgreSQL
您可能需要检查您使用的 Postgres 版本 运行。如果版本是通过 spring 父级指向的,可能需要更新 spring 版本。
就我而言:因为当前的 postgres 是 v13。 Modified spring parent version: it was on 1.4; made it to match to 2.14. Finally update maven dependency and re-run the application
。这解决了问题。
在目录中获取您的 pg_hba.conf 文件
C:\程序Files\PostgreSQL\data\pg_hba.conf
并且只需将 Column Method 下的 scram-sha-256 更改为 trust。
对我有用!
使用这些:
将其复制到您的配置单元库
- sudo mv postgresql-42.2.24.jar /opt/hive/lib/postgresql-42.2.24.jar
更改对 ipv4 本地连接的信任对我有用。
解决方案:
在目录 C:\Program Files\PostgreSQL\data\pg_hba.conf
中获取您的 pg_hba.conf
文件
只需将列方法下的 scram-sha-256 更改为信任即可。
如果您在 Docker
中遇到困难:
- 首先:运行容器
-e POSTGRES_HOST_AUTH_METHOD=md5
(doc)
docker run -e POSTGRES_HOST_AUTH_METHOD=md5 -e POSTGRES_PASSWORD=doesntmatter -p 5432:5432 --name CONTAINERNAME -d postgres
- 其次:允许
md5
加密,如其他答案中所述:
docker exec -ti -u postgres CONTAINERNAME bash -c "echo 'password_encryption=md5' >> /var/lib/postgresql/data/postgresql.conf"
- 第三:重启容器
docker restart CONTAINER NAME
- 第四:您需要以
md5
格式重新创建postgres
密码
docker exec -ti -u postgres CONTAINERNAME psql
alter role postgres with a password 'THE-NEW-PASSWORD';
* 请注意 scram-sha-256
比 md5 (doc)
好得多
对我来说,更新 postgres 库有助于解决这个问题。
我最近尝试了 Postgres。将其安装在本地(PostgreSQL 13.0)。 创建了一个 Maven 项目并使用了 Spring Data JPA,工作正常。而当我尝试使用 Gradle 项目时,我无法连接到数据库并不断收到以下错误。
org.postgresql.util.PSQLException: The authentication type 10 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it is using an authentication scheme supported by the driver. at 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 org.postgresql.jdbc.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(Unknown Source) [na:1.8.0_261] at java.sql.DriverManager.getConnection(Unknown Source) [na:1.8.0_261] at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:94) [postgresql-42.1.4.jar:42.1.4] at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:79) [postgresql-42.1.4.jar:42.1.4]
我也尝试过使用 JDBCTemplate。不起作用
修改了引用 this post 的 pg_hba.cfg 文件 - 不起作用
使用已弃用的 Lib of - 也不起作用。
请给我一个解决这个问题的建议。
我的代码和配置:
@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")
password_encryption
是这样设置的:
postgres=# show password_encryption;
password_encryption
---------------------
scram-sha-256
(1 row)
通过将 password_encryption
设置为 scram-sha-256
(这是 v13 中的默认值),您还可以获得 scram-sha-256
身份验证,即使您在 [=14] 中拥有 md5
=].
现在您在客户端使用不支持该身份验证方法的旧 JDBC 驱动程序版本,即使 PostgreSQL 在三年前的 v10 中引入了它。
您应该升级 JDBC 驱动程序。另一种方法是将 password_encryption
设置回 md5
,但随后您将不得不重置所有密码并以较低的安全性生活。
我想这个问题的解决方案是使用 9.6 版。 改版本后就正常了
我通过在 PostgreSQL 版本 13:
中应用以下步骤解决了类似问题- 在
postgresql.conf
中将
password_encryption
更改为md5
Windows: C:\Program Files\PostgreSQL\data\postgresql.conf
GNU/Linux: /etc/postgresql/13/main/postgresql.conf
- 在
pg_hba.conf
中将
scram-sha-256
更改为md5
Windows: C:\Program Files\PostgreSQL\data\pg_hba.conf
GNU/Linux: /etc/postgresql/13/main/pg_hba.conf
host all all 0.0.0.0/0 md5
更改密码(此恢复密码为md5格式)。
示例:
ALTER ROLE postgres WITH PASSWORD 'root'
;如果您在非生产环境中工作,请确保在
postgresql.conf
中设置listen_addresses = '*'
。
在 pom.xml
中对 Postgres 使用最新的 Maven 依赖项<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<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>
如果你使用的是 postgresql 9.1+,你必须检查你的 maven 依赖关系,那么你的依赖关系应该像上面那样
要了解 Maven 依赖性,请参阅此 link How do you add PostgreSQL Driver as a dependency in Maven?
根据 wiki,SCRAM-SHA-256
加密支持的 JDBC 驱动程序为 42.2.0 或更高版本。
在我的例子中,驱动程序是 41.1.1。将其更改为 42.2.0 或更高版本。这对我来说已经解决了。
(Maven, pom.xml
):
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.0</version>
</dependency>
在 pg_hba.conf
中将方法更改为“信任”在 12.6 版本上工作正常...只需降级 PostgreSQL
您可能需要检查您使用的 Postgres 版本 运行。如果版本是通过 spring 父级指向的,可能需要更新 spring 版本。
就我而言:因为当前的 postgres 是 v13。 Modified spring parent version: it was on 1.4; made it to match to 2.14. Finally update maven dependency and re-run the application
。这解决了问题。
在目录中获取您的 pg_hba.conf 文件 C:\程序Files\PostgreSQL\data\pg_hba.conf
并且只需将 Column Method 下的 scram-sha-256 更改为 trust。
对我有用!
使用这些:
将其复制到您的配置单元库
- sudo mv postgresql-42.2.24.jar /opt/hive/lib/postgresql-42.2.24.jar
更改对 ipv4 本地连接的信任对我有用。
解决方案:
在目录 C:\Program Files\PostgreSQL\data\pg_hba.conf
pg_hba.conf
文件
只需将列方法下的 scram-sha-256 更改为信任即可。
如果您在 Docker
中遇到困难:
- 首先:运行容器
-e POSTGRES_HOST_AUTH_METHOD=md5
(doc)
docker run -e POSTGRES_HOST_AUTH_METHOD=md5 -e POSTGRES_PASSWORD=doesntmatter -p 5432:5432 --name CONTAINERNAME -d postgres
- 其次:允许
md5
加密,如其他答案中所述:
docker exec -ti -u postgres CONTAINERNAME bash -c "echo 'password_encryption=md5' >> /var/lib/postgresql/data/postgresql.conf"
- 第三:重启容器
docker restart CONTAINER NAME
- 第四:您需要以
md5
格式重新创建postgres
密码
docker exec -ti -u postgres CONTAINERNAME psql
alter role postgres with a password 'THE-NEW-PASSWORD';
* 请注意 scram-sha-256
比 md5 (doc)
对我来说,更新 postgres 库有助于解决这个问题。