programing

인증 플러그인 'caching_sha2_password' 문제를 해결하는 방법

procenter 2023. 1. 13. 20:14
반응형

인증 플러그인 'caching_sha2_password' 문제를 해결하는 방법

이클립스에서는 어플리케이션을 시작할 때 이 메시지가 표시되었습니다.사용할 사투리를 검출할 수 없습니다.java.sqlSQLException:인증 플러그인 'caching_sha2_password'를 로드할 수 없습니다.

java.sql에 있습니다.SQLException:com.mysql.jdbc에서 인증 플러그인 'caching_sha2_password'를 로드할 수 없습니다.SQLerror.createSQLException(SQLerror.java:868) (com.mysql.jdbc에 있습니다.SQLerror.createSQLException(SQLerror.java:864) (com.mysql.jdbc에 있습니다.MysqlIO.proceed 악수플러그 대응인증(MysqlIO.java:1746)은 com.mysql.jdbc에서 이루어집니다.MysqlIO.doHandshake(MysqlIO.java:1226) (com.mysql.jdbc에서).com.mysql.jdbc에서 ConnectionImpl.coreConnect(ConnectionImpl.java:2191)를 실행합니다.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:222)는 com.mysql.jdbc에 있습니다.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)는 com.mysql.jdbc에 있습니다.ConnectionImpl.(ConnectionImpl.java:779) (com.mysql.jdbc에 있습니다.JDBC4 Connection 。(JDBC4Connection.java:47)을 sun.reflect로 설정합니다.NativeConstructorAccessorImpl.newInstance0(네이티브메서드)을 sun.reflect로 설정합니다.NativeConstructorAccessorImpl.newInstance(알 수 없는 소스)가 sun.reflect에 있습니다.java.lang.reflect에서 ConstructorAccessorImpl.newInstance(알 수 없는 소스)를 위임하고 있습니다.com.mysql.jdbc에 있는 Constructor.newInstance(Unknown Source).com.mysql.jdbc에 있는 Util.handleNewInstance(Util.java:425).com.mysql.jdbc에 있는 ConnectionImpl.getInstance(ConnectionImpl.java:389)입니다.java.sql에서 NonRegisteringDriver.connect(NonRegisteringDriver.java:330).java.sql에 있는 DriverManager.getConnection(알 수 없는 소스).ch.qos.logback.core.db에 있는 DriverManager.getConnection(알 수 없는 소스).드라이버 매니저 접속Source.getConnection(DriverManagerConnection)ch.qos.logback.core.db에 있는 Source.java:54)를 참조해 주세요.연결SourceBase.discoverConnectionProperties(Connection)ch.qos.logback.core.db에 있는 SourceBase.java:46)를 참조해 주세요.드라이버 매니저 접속Source.start(Driver Manager Connection)ch.qos.logback.core.joran.action의 Source.java:38).중첩된 복합 속성IA.end(내스트된 복합 속성)ch.qos.logback.core.joran.spi에서 IA.java:161)를 실행합니다.ch.qos.logback.core.joran.spi에서 interpreter.callEndAction(Interpreter.java:309)을 실행합니다.ch.qos.logback.core.joran.spi에 있는 Interpreter.endElement(Interpreter.java:193)입니다.ch.qos.logback.core.joran.spi에 있는 Interpreter.endElement(Interpreter.java:179)입니다.ch.qos.logback.core.joran에서 EventPlayer.play(EventPlayer.java:62)를 실행합니다.ch.qos.logback.core.joran에 있는 Generic Configure.doConfigure(Generic Configure.java:165)를 참조해 주세요.ch.qos.logback.core.joran에 있는 Generic Configure.doConfigure(Generic Configure.java:152)를 참조해 주세요.ch.qos.logback.core.joran에 있는 Generic Configure.doConfigure(Generic Configure.java:110).ch.qos.logback.classic.util에서 Generic Configure.doConfigure(Generic Configure.java:53)를 실행합니다.ch.qos.logback.classic.util의 ContextInitializer.configureByResource(ContextInitializer.java:75).ContextInitializer(콘텍스트 이니셜라이저)org.slf4j.impl에서 autoConfig(ContextInitializer.java:150)를 실행합니다.org.slf4j.impl에 있는 StaticLoggerBinder.init(StaticLoggerBinder.java:84)입니다.Static Logger Binder.(StaticLoggerBinder.java:55) org.slf4j에 있습니다.org.slf4j의 LoggerFactory.bind(LoggerFactory.java:150).Logger Factory.퍼포먼스org.slf4j에서의 초기화(LoggerFactory.java:124)Logger Factory.getch.qos.logback.classic.util에 있는 ILogger Factory(Logger Factory.java:412).상태 Via SLF4JLoggerFactory.addStatus(StatusViaSLF4)ch.qos.logback.classic.util에 있는 JLoggerFactory.java:32)를 참조해 주세요.상태 Via SLF4JLoggerFactory.addInfo(StatusViaSLF4)ch.qos.logback.classic.servlet에 있는 JLoggerFactory.java:20).Logback Servlet ContainerInitializer.onStartup(Logback Servlet Container)initializer.java:32)를 org.apache.catalina.core로 설정합니다.org.apache.catalina.util에서 StandardContext.startInternal(StandardContext.java:5245)을 참조해 주세요.org.apache.catalina.core의 LifecycleBase.start(LifecycleBase.java:150).org.apache.catalina.core의 ContainerBase$StartChild.call(ContainerBase.java:1421)입니다.java.util.concurrent의 ContainerBase$StartChild.call(ContainerBase.java:1411).java.util.concurrent에서 FutureTask.run(알 수 없는 소스)을 실행합니다.java.util.concurrent의 ThreadPoolExecutor.runWorker(알 수 없는 소스).ThreadPoolExecutor$java.lang에서 Worker.run(Unknown Source)을 실행합니다.Thread.run(알 수 없는 소스)

MySQL 8.0.4부터는 MySQL 서버의 기본 인증 플러그인을 mysql_native_password에서 caching_sha2_password로 변경했습니다.

다음 명령을 실행하여 문제를 해결할 수 있습니다.

샘플 사용자 이름 / 비밀번호 => student / pass123

ALTER USER 'student'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';

자세한 내용은 공식 페이지를 참조하십시오.MySQL 레퍼런스 매뉴얼

다른 사람들은 근본 문제를 지적하고 있지만, 제 경우 dbeaver를 사용하고 있었고, 처음에 dbeaver와의 mysql 연결을 설정할 때 잘못된 mysql 드라이버를 선택하고 있었습니다(답변은 여기 credit: https://github.com/dbeaver/dbeaver/issues/4691#issuecomment-442173584 ).

아래 그림에서 MySQL을 선택하면 드라이버가 mysql 4+이기 때문에 데이터베이스 정보 힌트에 나와 있는 오류가 나타납니다.


이 오류의 경우 이 그림에서 상위 mysql 4+를 선택하면 이 쿼시톤에서 언급된 오류가 나타납니다.


MySQL 드라이버를 선택하는 대신 아래 그림과 같이 MySQL 8+ 드라이버를 선택합니다.


여기에 이미지 설명 입력

mysql-connector" lib 패키지를 다음과 같은 mysql 버전으로 업그레이드합니다.이 버전에서는 8.0.13 버전을 사용하고 있습니다.pom에서는 버전이 변경되었습니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.13</version>
</dependency>

이것으로 나의 문제는 해결되었다.

mysql_connector를 잘못 사용하고 있을 수 있습니다.

동일한 mysql 버전의 커넥터 사용

이 에러는 Spring Boot 앱에서 발생하고 있습니다만, 다른 앱에서는 발생하고 있지 않습니다.마지막으로 Spring Boot 버전이 2.0.0이라는 것을 알게 되었습니다.RELEASE로 동작하고 있던 것은 2.0.1이었습니다.풀어주다.그 결과 MySQL Connector가 5.1.45와 5.1.46의 차이로 바뀌었습니다.기동시에 이 에러를 발생시킨 앱의 Spring Boot 버전을 업데이트 해, 동작하게 되었습니다.

MySQL8이 패스워드의 암호화를 변경했기 때문에 오래된 커넥터가 패스워드를 잘못 암호화하고 있기 때문에 업데이트해야 하는 MySQL용 커넥터일 수 있습니다.

Java 커넥터의 maven repo는 여기에서 찾을 수 있습니다.
Flyway 플러그인을 사용하는 경우 업데이트도 고려해야 합니다!

다음으로 maven pom을 간단하게 갱신할 수 있습니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

또는 Gradle을 사용하는 다른 사용자의 경우 다음과 같이 build.gradle을 업데이트할 수 있습니다.

 buildscript {
    ext {
        ...
    }
    repositories {
        ...
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('mysql:mysql-connector-java:8.0.11')
    }
 }

필요한 모든 것(build.gradle 예시)

오래된 커넥터를 삭제하고 새 버전(mysql-connector-java-5.1.46)을 다운로드하기만 하면 됩니다.

mysql 8.0.12를 사용하고 있으며 mysql 커넥터를 mysql-connector-java-8.0.12로 업데이트하여 문제가 해결되었습니다.

도움이 됐으면 좋겠네요

위의 백합에서 언급한 바와 같이:

MySQL 8.0.4부터 MySQL 팀은 MySQL 서버의 기본 인증 플러그인을 mysql_native_password에서 caching_sha2_password로 변경했습니다.

이 문제를 해결하려면 다음 세 가지 방법이 있습니다.

 1. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_name';
    GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost';
    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
    'user_name';

 2. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user_name';
GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost'

 3. If the user is already created, the use the following command:

    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
        'user_name';

"caching_sha2_password" 플러그인과 함께 제공되는 새로운 MySQL 버전에서 문제가 발생했습니다. 해결하려면 다음 명령을 따르십시오.

DROP USER 'your_user_name'@'%';
CREATE USER 'your_user_name'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_user_name'@'%' identified by 'your_user_password';

또는 다음 명령을 사용하여 권한을 그대로 유지할 수도 있습니다.

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

아래 종속성을 사용하여 동일한 문제를 해결했습니다.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>

방금 46버전으로 바꾸면 모든 게 작동해요.

mysql-connector lib 패키지를 업데이트하여 데이터베이스를 더욱 안전하게 하는 것이 좋다고 생각합니다.

버전 8.0.12의 mysql을 사용하고 있습니다.mysql-connector-java를 버전 8.0.11로 업데이트 했을 때 문제가 해소되었습니다.

Murach JSP Book의 기성 프로젝트 작업 중 NetBeans에서 이 문제를 발견했습니다.이 문제는 MySQL 8.0.13 데이터베이스와 함께 5.1.23 커넥터 J를 사용하는 것이 원인입니다.나는 오래된 운전자를 새 운전자로 교체해야 했다.커넥터 J를 다운로드한 후 3단계를 수행합니다.

NetBeans 프로젝트 커넥터 J를 교체하는 방법:

  1. 여기서 현재의 커넥터 J를 다운로드합니다.그런 다음 OS에 복사합니다.

  2. NetBeans에서 Projects 탭 옆에 있는 Files 탭을 클릭합니다.mysql-connector-java-5.1.23.jar 등의 오래된 커넥터를 찾습니다.이 오래된 커넥터를 삭제합니다.새 커넥터를 붙여넣습니다.

  3. Projects 탭을 클릭합니다.Libraries 폴더로 이동합니다.오래된 mysql 커넥터를 삭제합니다.[ Libraries ]폴더를 오른쪽 클릭합니다.Add Jar / Folder를 선택합니다.새 커넥터를 설치한 위치로 이동하여 open을 선택합니다.

  4. 프로젝트 탭에서 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다.팝업 메뉴 하단의 Resolve Data Sources(데이터 원본 해결)를 선택합니다.Add Connection을 클릭합니다.이 시점에서 NetBeans는 앞으로 건너뛰어 오래된 커넥터를 사용하는 것으로 가정합니다.건너뛴 창으로 돌아가려면 뒤로 버튼을 클릭하십시오.기존 커넥터를 분리하고 새 커넥터를 추가합니다.[Next] (다음)을 클릭하여 [Test Connection](연결 테스트)를 클릭하여 동작하고 있는지 확인합니다.

비디오 참조용으로 이것이 유용하다는 것을 알았습니다.IntelliJ IDEA에서는 이것이 유용하다고 생각했습니다.

커넥터를 MySQL 8의 새 인증 플러그인을 지원하는 버전으로 업데이트할 수 있는 경우 이 작업을 수행하십시오.어떤 이유로 이것이 선택사항이 아닌 경우 데이터베이스 사용자의 기본 인증방식을 네이티브로 변경합니다.

여러 버전의 커넥터 jar 파일을 추가한 경우 sql 버전과 일치하는 커넥터 jar 파일만 추가한 경우 connect .jar 파일을 삭제합니다.

또 다른 원인은 잘못된 포트를 가리키고 있다는 것입니다.

실제로 올바른 SQL 서버를 가리키고 있는지 확인하십시오.3306에서 MySQL을 기본 설치했을 수 있지만 실제로는 다른 MySQL 인스턴스가 필요할 수 있습니다.

포트를 확인하고 DB에 대해 쿼리를 실행합니다.

저도 헷갈리는 오류가 있습니다.결국 mysql Java 커넥터 버전에서는 이것이 문제가 되지 않는다는 것을 알게 되었습니다.실제로 이 오류는 datasource-user-name을 잘못 설정했다는 것입니다(이 설정:spring.datasource.druid.username).

  1. sprint 부트 에러 정보는 다음과 같습니다.
create connection error, 
url: jdbc:mysql://..amazonaws.com:3306/moe_grooming?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false, errorCode 0, state null

3624 java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password

내 환경:

  1. MySQL Server 8.0.22
  2. mysql Java 커넥터 버전
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>5.1.44</version>
</dependency>
  1. 이 사용자의 사용된 암호 플러그인은 다음과 같습니다.mysql_native_password

이 에러가 발생했을 경우Authentication plugin 'caching_sha2_password' cannot be loaded수출 또는 기타 방법으로.DBeaver는 여전히 MySQL 바이너리 버전 5를 사용하기 때문입니다.

따라서 https://dev.mysql.com/downloads/mysql/에서 MySQL 바이너리 버전8을 다운로드하여 아래 이미지와 같은 새로운 환경의 경로에 압축을 풀어야 합니다.

여기에 이미지 설명 입력

그런 다음 여기서 또는 편집 연결 시 바이너리를 설정해야 합니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/50387952/how-to-resolve-unable-to-load-authentication-plugin-caching-sha2-password-issu

반응형