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

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

我最近试过博士后。在本地安装(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文件-不起作用

使用了不推荐使用的库-也不起作用

请给我一个解决这个问题的办法

我的代码和配置:

    @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版中应用以下步骤解决了类似问题:

  • 将密码\u加密更改为md5

    文件:C:\Program Files\PostgreSQL\13\data\PostgreSQL.conf

  • 在主机设置中将
    scram-sha-256
    更改为
    md5

    文件:C:\Program Files\PostgreSQL\13\data\pg_hba.conf

    托管所有0.0.0.0/0 md5

  • 更改密码(此恢复密码为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>