인증 플러그인 'caching_sha2_password'를로드 할 수 없음 문제 해결 방법


115

이클립스에서 응용 프로그램을 시작할 때 나는 이것을 얻었습니다-사용할 방언을 찾을 수 없습니다. java.sql.SQLException : 인증 플러그인 'caching_sha2_password'를로드 할 수 없습니다.

java.sql.SQLException에서 : 인증 플러그인 'caching_sha2_password'를로드 할 수 없습니다. at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) at at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication (MysqlIO. java : 1746) at com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) at com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) at at com.mysql.jdbc.ConnectionImpl. connectOneTryOnly (ConnectionImpl.java:2222) at com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) at com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) at com.mysql.jdbc .JDBC4Connection. (JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.

답변:


169

MySQL 8.0.4부터 MySQL 서버의 기본 인증 플러그인 이 mysql_native_password 에서 caching_sha2_password변경되었습니다 .

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

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

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

자세한 내용은 공식 페이지를 참조하십시오 : MySQL Reference Manual


9
이것이 작동하지만 더 안전한 sha2_caching 인증 플러그인을 사용할 수 있도록 MySQL Connector / J 버전 (다른 답변 중 일부에서 제안한대로)을 업그레이드하는 것이 좋습니다.
Mark Rotteveel 2018

@MarkRotteveel 네! 나도 동의합니다.
Gaurav

@MarkRotteveel 어떻게?
theonlygusti

4
@theonlygusti MySQL Connector / J를 최소 5.1.46 또는 8.0.14로 업데이트해야합니다.
Mark Rotteveel

@MarkRotteveel 어떻게해야합니까? stackoverflow.com/questions/54413365/…
theonlygusti

68

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

아래 그림에서 MySQL 선택을 선택하면 데이터베이스 정보 팁에서 볼 수있는 드라이버가 mysql 4+이므로 언급 된 오류가 발생합니다.


이 오류에 대해이 그림에서 상위 mysql 4+ 선택을 선택하면이 질문에 언급 된 오류가 표시됩니다.


MySQL 드라이버를 선택하는 대신 아래 그림과 같이 MySQL 8+ 드라이버를 선택하십시오.


여기에 이미지 설명 입력


8
고마워, 이것은 내 문제였다. 그런 다음 "공개 키 검색이 허용되지 않습니다"라는 또 다른 오류가 발생 했습니까?
Tomáš Zato-Monica 복원

흥미롭게도, 위의 이후에 dbeaver는 테이블을로드했습니다.
Paul

4
감사합니다. 이것은 나를 많이 도왔습니다. DBeaver에서 "Public Ket Retrieval is not allowed"오류가 계속 발생하는 사람들을 위해 여기 에서이 문제를 해결하는 링크를 찾았 습니다 .
jpisty

7
Public key retrieval is not allowed
aderchox

받은 사람들 Public Key Retrieval is not allowed. 프로그램을 다시 실행하십시오.
Pranithan T.

43

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>

이 후에 내 문제가 해결되었습니다.


2
유용한 답변에 감사드립니다. 다른 사람들은 최신 버전을 찾으려면이 링크를 사용하십시오. mvnrepository.com/artifact/mysql/mysql-connector-java
유 서프


16

한 Spring Boot 앱 에서이 오류가 발생했지만 다른 앱에서는 발생하지 않았습니다. 마지막으로 작동하지 않는 Spring Boot 버전은 2.0.0.RELEASE이고 작동하는 버전은 2.0.1.RELEASE입니다. 이는 MySQL 커넥터 (5.1.45와 5.1.46)에 차이를 가져 왔습니다. 시작할 때이 오류가 발생하는 앱의 Spring Boot 버전을 업데이트했으며 이제 작동합니다.


이것은 나를 도왔다!
Anand Varkey Philips

나를 위해 일했습니다! 버전 1.5.8.RELEASE를 사용하고있었습니다.
Ionuț Ciuta

15

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


효과가있었습니다. 이 솔루션을 찾는 데 거의 이틀을 낭비했습니다. 감사.
Hemant Nagpal

11

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

누군가에게 도움이되기를 바랍니다.


최소 5.1.46 또는 현재 8.0.18과 같은 최신 버전으로 업그레이드하십시오. 이렇게하면 문제를 해결하는 데 도움이됩니다.
Atul

9

위의 회신에서 언급했듯이 :

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';

9

이것은 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 예제)


5

"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;

안녕하세요 당신은 무엇을 의미하는가 *에 대한 표현이 무엇인지 세 번째 줄에 "your_db_name *."
Sarath 모한

사용자가 액세스 권한을 얻는 것으로 가정하는 db 이름입니다. 또는 문제를 해결할 마지막 ALTER 문만 사용할 수 있습니다. ALTER에서는 사용자 이름 만 전달하면됩니다

your_db_name. *의 모든 권한을 'your_user_password'로 식별 된 'your_user_name'@ '%'에게 부여합니다.
Sarath Mohan

좋아, DB에 연결하는 동안 문제가 발생 했습니까? 연결 문자열에 일부 DB 이름도 지정한다는 의미입니다. your_db_name 대신 동일한 DB를 추가해야합니다. 당신은 취소 희망

4

이 Murach JSP 책 에서 기성품 프로젝트로 작업 할 때 NetBeans에서이 문제가 발생했습니다 . 이 문제는 MySQL 8.0.13 데이터베이스에서 5.1.23 커넥터 J를 사용하여 발생했습니다. 이전 드라이버를 새 드라이버로 교체해야했습니다. Connector J를 다운로드 한 후 세 단계를 거쳤습니다.

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

  1. 여기 에서 현재 커넥터 J를 다운로드 하십시오 . 그런 다음 OS에 복사하십시오.

  2. NetBeans에서 프로젝트 탭 옆에있는 파일 탭을 클릭합니다. mysql-connector-java-5.1.23.jar 또는 기존 커넥터를 찾으십시오. 이 이전 커넥터를 삭제하십시오. 새 커넥터를 붙여 넣습니다.

  3. 프로젝트 탭을 클릭하십시오. Libraries 폴더로 이동합니다. 이전 mysql 커넥터를 삭제하십시오. Libraries 폴더를 마우스 오른쪽 버튼으로 클릭합니다. Add Jar / Folder를 선택하십시오. 새 커넥터를 넣은 위치로 이동하고 열기를 선택합니다.

  4. 프로젝트 탭에서 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다. 팝업 메뉴 하단에서 데이터 소스 해결을 선택합니다. 연결 추가를 클릭하십시오. 이 시점에서 NetBeans는 앞으로 건너 뛰고 이전 커넥터를 사용한다고 가정합니다. 건너 뛴 창으로 돌아가려면 뒤로 버튼을 클릭합니다. 이전 커넥터를 제거하고 새 커넥터를 추가하십시오. 다음을 클릭하고 연결 테스트가 작동하는지 확인하십시오.

비디오 참조를 위해 이것이 유용하다는 것을 알았습니다 . IntelliJ IDEA의 경우 이것이 유용하다는 것을 알았습니다 .


내 대답이 완전히 관련이 없다는 것을 알고 있습니다. 내 질문 이이 질문에 중복 된 것으로 표시 되었기 때문에 여기에 NetBeans 답변을 게시했습니다 .
Jack J

4

아래 종속성을 사용하여 정확히 동일한 문제를 수행했습니다.

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

버전 46으로 변경하면 모든 것이 작동합니다.


3

"mysql-connector"lib 패키지를 업데이트하는 것이 더 낫다고 생각하므로 데이터베이스가 더 안전 할 수 있습니다.

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


2

커넥터를 MySQL 8의 새로운 인증 플러그인을 지원하는 버전으로 업데이트 할 수 있다면 그렇게하십시오. 어떤 이유로 옵션이 아닌 경우 데이터베이스 사용자의 기본 인증 방법을 기본으로 변경하십시오.


0

다중 버전 커넥터 jar 파일을 추가 한 경우 연결 .jar 파일을 제거하십시오. SQL 버전과 일치하는 커넥터 jar 파일 만 추가하십시오.


0

또 다른 원인은 잘못된 포트를 가리키고 있다는 사실 일 수 있습니다.

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

포트를 확인하고 db에 대해 몇 가지 쿼리를 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.