programing

인증 유형 10이 지원되지 않아 Postgres DB에 연결할 수 없습니다.

lovejava 2023. 2. 28. 23:09

인증 유형 10이 지원되지 않아 Postgres DB에 연결할 수 없습니다.

나는 최근에 Postgres를 사용해 보았다.로컬에 설치(Postgre).SQL 13.0).Maven 프로젝트를 만들고 Spring Data JPA를 사용했지만 정상적으로 작동합니다.반면 Gradle 프로젝트를 사용해보니 DB에 접속이 되지 않아 다음과 같은 오류가 계속 발생합니다.

org.postgresql.displays.displayPSQLException:인증 타입 10은 지원되지 않습니다.클라이언트의 IP 주소 또는 서브넷을 포함하도록 pg_hba.conf 파일을 설정했는지, 드라이버가 지원하는 인증 방식을 사용하고 있는지 확인합니다.org.postgresql.core.v3로 이동합니다.Connection Factory Impl.do Authentication(Connection Factory Impl).java:614)~[postgresql-42.1.4.jar:42.1.4](org.postgresql.core.v3).Connection Factory Impl.open Connection Impl(Connection Factory Impl).java:222)~[postgresql-42.1.4.jar:42.1.4] 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] (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).java.sql의 Driver Manager.getConnection(Unknown Source) [na:1.8.0_261].org.postgresql.ds.common의 DriverManager.getConnection(Unknown Source) [na:1.8.0_261].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]

JDB를 사용해 보았습니다.CTemplate도요동작하지 않다

이 투고를 참조하여 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)

Postgre에서 아래의 단계를 적용하여 비슷한 문제를 해결했습니다.SQL 버전 13:

  1. password_encryption로로 합니다.md5postgresql.conf
Windows: C:\Program Files\PostgreSQL\13\data\postgresql.conf
GNU/Linux:           /etc/postgresql/13/main/postgresql.conf

여기에 이미지 설명 입력

  1. scram-sha-256로로 합니다.md5pg_hba.conf
Windows: C:\Program Files\PostgreSQL\13\data\pg_hba.conf
GNU/Linux:           /etc/postgresql/13/main/pg_hba.conf
host    all             all             0.0.0.0/0               md5

여기에 이미지 설명 입력

  1. 비밀번호 변경(이 복원 비밀번호는 md5 형식).

    ::ALTER ROLE postgres WITH PASSWORD 'root';

  2. 「이행」을 설정해 .listen_addresses = '*'postgresql.conf실제 가동 환경 이외의 환경에서 작업하는 경우.

디렉토리 C:\Program Files\Postgre에서 pg_hba.conf 파일을 가져옵니다.SQL\13\data\pg_hba.conf

또한 Column Method에서 scram-sha-256을 trust로 간단히 변경합니다.

여기에 이미지 설명 입력

나한테는 먹혔어!

Wiki에 따르면 지원되는 JDBC 드라이버는SCRAM-SHA-25642.2.0.는 41.입니다.2.합니다.걸로로해해해해해

,,, (이,,)pom.xml

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.0</version>
</dependency>

「」를 설정해 .password_encryption로로 합니다.scram-sha-256도됩니다(v13의 디폴트값).scram-sha-256이 있는 라도)md5pg_hba.conf.

현재 Postgre는 클라이언트 측에서 오래된 JDBC 드라이버 버전을 사용하고 있지만 이 인증 방식을 지원하지 않습니다.SQL은 3년 전에 v10에서 도입했습니다.

JDBC 방송사 다른 방법으로는 '보다 낫다'를 설정하는 이 있습니다.password_encryption으로 md5모든 비밀번호를 리셋하고 보안이 낮은 상태로 살아야 합니다.

<?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 의존성에 대해 알아보려면 이 링크를 참조하십시오.Postgre를 추가하려면 어떻게 해야 합니까?SQL Driver는 Maven의 종속기업입니까?

pg_hba.conf에서 Method를 "trust"로 변경합니다.

이 작업을 수행하는 데 어려움을 겪고 있는 경우Docker:

  1. 번째 : 를 첫 the : the테 the the the the로 합니다.-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
  1. 번째: 허용: 허용: 허용md5다음과 같이 합니다.
docker exec -ti -u postgres CONTAINERNAME bash -c "echo 'password_encryption=md5' >> /var/lib/postgresql/data/postgresql.conf"
  1. 세 번째: 컨테이너 재시작
docker restart CONTAINER NAME
  1. 번째: " ": " " " 를 다시 .postgres in " "md5 변경
docker exec -ti -u postgres CONTAINERNAME psql

alter role postgres with password 'THE-NEW-PASSWORD';

* ★★★★★★★★★★★★★*scram-sha-256md5보다 훨씬 낫다(doc)

다음을 사용합니다.

  1. wget https://jdbc.postgresql.org/download/postgresql-42.2.24.jar

하이브 라이브러리에 복사

  1. sudo mv postgresql-42.24.jar /opt/syslog/lib/postgresql-42.24.jar

postgres 라이브러리를 업데이트하면 이 문제를 해결할 수 있습니다.

버전 12.6에서는 정상적으로 동작합니다.Postgre 다운그레이드만 하면 됩니다.SQL

포스트그레스 parentspring parent.spring version을 되는 .13 : [ 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이치노

제안 사항:

  1. 현재 JDBC 드라이버가 도움이 됩니다(예: postgresql-42.3.6.jar).

  2. 스파크 인스톨 디렉토리의 /jars 폴더에 카피합니다(이 예에서는, 1대의 머신이 있는 것을 전제로 하고 있습니다).

  3. Python - pyspark를 일반 라이브러리로 Import할 수 있도록 "findspark" 설치

  4. 도움이 되었으면 하는 예를 다음에 제시하겠습니다.

    import findspark
    findspark.init()
    
    from pyspark.sql import SparkSession
    
    sparkClassPath = "C:/spark/spark-3.0.3-bin-hadoop2.7/jars"
    
    spark = SparkSession \
        .builder \
        .config("spark.driver.extraClassPath", sparkClassPath) \
        .getOrCreate()
    
    df = spark.read \
        .format("jdbc") \
        .option("url", "jdbc:postgresql://{YourHostName}:5432/{YourDBName}") \
        .option("driver", "org.postgresql.Driver") \
        .option("dbtable", "{YourTableName}") \
        .option("user", "{YourUserName") \
        .option("password", "{YourSketchyPassword") \
        .load()
    
  5. pgadmin을 아직 설치하지 않은 경우 설치합니다.
    도커 경유로 시험해 보다

postgresql을 다운로드해야 합니다.jar를 .../jre/lib/ext/폴더로 이동합니다.그것은 나에게 효과가 있었다.

pom.xml의 Postgres에 최신 maven 의존관계 사용

ipv4 local connect에 대한 신뢰 변경은 성공했습니다.

솔루션:

구입하다pg_hba.conf디렉토리 내의 파일C:\Program Files\PostgreSQL\13\data\pg_hba.conf

또한 Column Method에서 scram-sha-256을 trust로 간단히 변경합니다.

이 문제에 대한 해결책은 버전 9.6을 사용하는 것이라고 생각합니다.버전 변경 후 정상적으로 동작합니다.

pg_hba.conf를 엽니다.신뢰할 IPv4 로컬 연결 설정

언급URL : https://stackoverflow.com/questions/64210167/unable-to-connect-to-postgres-db-due-to-the-authentication-type-10-is-not-suppor