首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于身份验证类型10而无法连接到Postgres DB,因此不支持

由于身份验证类型10而无法连接到Postgres DB,因此不支持
EN

Stack Overflow用户
提问于 2020-10-05 14:01:17
回答 15查看 121.6K关注 0票数 49

我最近试过用Postgres。安装在本地(PostgreSQL 13.0)。创建了一个maven项目并使用了,工作正常。然而,当我尝试使用Gradle项目时,我无法连接到DB并继续获得以下错误。

org.postgresql.util.PSQLException:不支持身份验证类型10。检查是否已将pg_hba.conf文件配置为包含客户端的IP地址或子网,以及它是否使用驱动程序支持的身份验证方案。org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:614) ~PostgreSQL42.1.4.jar:42.1.4 at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:222) ~PostgreSQL42.1.4.jar:42.1.4 at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~PostgreSQL42.1.4.jar:42.1.4 at org.postgresql.jdbc.PgConnection.(PgConnection.java:194) ~postgresql-42.1.4.jar:42.1.4在org.postgresql.Driver.makeConnection(Driver.java:450) ~postgresql-42.1.4.jar:42.1.4在org.postgresql.Driver.connect(Driver.java:252) ~postgresql-42.1.4.jar:42.1.4在java.sql.DriverManager.getConnection(未知源) na:1.8.0_261 at java.sql.DriverManager.getConnection(未知源) na:1.8.0_261在org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:94) PostgreSQL42.1.4.jar:42.1.4 at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:79) PostgreSQL42.1.4.jar:42.1.4

我也尝试过使用JDBCTemplate。不管用

修改pg_hba.cfg文件引用 post -不起作用

用了不推荐的-也不起作用。

请给我一个解决这个问题的建议。

我的代码和Config:

代码语言:javascript
运行
复制
    @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;
        
    }

}

依赖关系

代码语言:javascript
运行
复制
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设置如下:

代码语言:javascript
运行
复制
postgres=# show password_encryption;
 password_encryption
---------------------
 scram-sha-256
(1 row)
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2020-10-13 13:37:15

我通过在PostgreSQL 版本13中应用以下步骤解决了类似的问题

  1. password_encryption中将md5更改为postgresql.conf
代码语言:javascript
运行
复制
Windows: C:\Program Files\PostgreSQL\13\data\postgresql.conf
GNU/Linux:           /etc/postgresql/13/main/postgresql.conf

  1. scram-sha-256中将md5更改为pg_hba.conf
代码语言:javascript
运行
复制
Windows: C:\Program Files\PostgreSQL\13\data\pg_hba.conf
GNU/Linux:           /etc/postgresql/13/main/pg_hba.conf
代码语言:javascript
运行
复制
host    all             all             0.0.0.0/0               md5

  1. 更改密码(此还原密码为md5格式)。 例子:ALTER ROLE postgres WITH PASSWORD 'root'
  2. 如果您在非生产环境中工作,请确保在postgresql.conf中设置了postgresql.conf
票数 47
EN

Stack Overflow用户

发布于 2021-06-09 07:23:14

在目录Files\PostgreSQL\13\data\pg_hba.conf C:\中获取pg_hba.conf文件

只需将列方法下的scram-sha-256更改为信任。

对我起作用了!

票数 31
EN

Stack Overflow用户

发布于 2021-01-17 08:40:43

根据维基,支持SCRAM-SHA-256加密的JDBC驱动程序是42.2.0或更高版本。就我而言,司机是41.1.1岁。将其更改为42.2.0或以上。帮我修好了。

(Maven,pom.xml):

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.0</version>
</dependency>
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64210167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档