Cách giải quyết vấn đề Không thể tải plugin xác thực 'caching_sha2_password'


112

Trong nhật thực khi tôi khởi động ứng dụng của mình, tôi nhận được điều này - Không thể tìm ra phương ngữ để sử dụng. java.sql.SQLException: Không thể tải plugin xác thực 'caching_sha2_password'.

tại java.sql.SQLException: Không thể tải plugin xác thực 'caching_sha2_password'. tại địa chỉ com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) tại com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) tại com.mysql.jdbcqlhentication. java: 1746) tại com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) tại com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) tại com.mysql.jdbc.Connection. connectOneTryOnly (ConnectionImpl.java:2222) tại com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) tại com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) tại com.mysql.jdbysql. .JDBC4Connection. (JDBC4Connection.java:47) tại sun.reflect.NativeConstructorAccessorImpl.

Câu trả lời:


168

Bắt đầu với MySQL 8.0.4, họ đã thay đổi plugin xác thực mặc định cho máy chủ MySQL từ mysql_native_password thành caching_sha2_password .

Bạn có thể chạy lệnh dưới đây để giải quyết vấn đề.

tên người dùng / mật khẩu mẫu => sinh viên / pass123

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

Tham khảo trang chính thức để biết chi tiết: Hướng dẫn tham khảo MySQL


8
Mặc dù điều này hoạt động, nhưng tốt hơn là nâng cấp phiên bản MySQL Connector / J (theo gợi ý của một số câu trả lời khác) vì điều đó cho phép bạn sử dụng plugin xác thực sha2_caching an toàn hơn.
Mark Rotteveel

@MarkRotteveel Có! Tôi cũng đồng ý về điều đó.
Gaurav

@MarkRotteveel như thế nào?
theonlygusti

4
@theonlygusti Bạn cần cập nhật MySQL Connector / J lên ít nhất 5.1.46 hoặc - tốt hơn - lên 8.0.14.
Mark Rotteveel

@MarkRotteveel làm cách nào để làm điều đó? stackoverflow.com/questions/54413365/…
theonlygusti,

66

Những người khác đã chỉ ra vấn đề gốc, nhưng trong trường hợp của tôi, tôi đang sử dụng dbeaver và ban đầu khi thiết lập kết nối mysql với dbeaver đã chọn sai trình điều khiển mysql (tín dụng ở đây để trả lời: https://github.com/dbeaver/dbeaver/ các vấn đề / 4691 # releaseecomment-442173584 )

Chọn lựa chọn MySQL trong hình bên dưới sẽ đưa ra lỗi được đề cập vì trình điều khiển là mysql 4+ có thể được nhìn thấy trong mẹo thông tin cơ sở dữ liệu.


Đối với lỗi này, việc chọn lựa chọn mysql 4+ hàng đầu trong hình này sẽ tạo ra lỗi được đề cập trong quesiton này


Thay vì chọn trình điều khiển MySQL, hãy chọn trình điều khiển MySQL 8+, được hiển thị trong hình bên dưới.


nhập mô tả hình ảnh ở đây


6
Cảm ơn, đây chính xác là vấn đề của tôi. Sau đó bạn có gặp phải lỗi khác: "Không được phép truy xuất khóa công khai" không?
Tomáš Zato - Phục hồi Monica

Thật thú vị, không sau những điều trên, dbeaver đã tải các bảng.
Paul

4
CẢM ƠN BẠN. Điều này đã giúp tôi rất nhiều. Đối với những người vẫn gặp lỗi "Không cho phép truy xuất kết quả công khai" trong DBeaver, tôi đã tìm thấy một liên kết giải quyết vấn đề này tại đây .
jpisty

3
Public key retrieval is not allowed
aderchox

43

Nâng cấp gói lib mysql-connector "của bạn với phiên bản mysql của bạn như bên dưới, tôi đang sử dụng phiên bản 8.0.13 và trong phiên bản pom, tôi đã thay đổi phiên bản:

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

Vấn đề của tôi đã được giải quyết sau đó.


1
Cảm ơn vì câu trả lời hữu ích. Đối với những người khác, để tìm phiên bản mới nhất, vui lòng sử dụng liên kết này; mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf

31

Có thể bạn đang sử dụng sai mysql_connector.

Sử dụng trình kết nối của cùng một phiên bản mysql


16

Tôi đã gặp lỗi này trong một ứng dụng Spring Boot, nhưng không phải trong ứng dụng khác. Cuối cùng, tôi thấy phiên bản Spring Boot trong phiên bản không hoạt động là 2.0.0.RELEASE và phiên bản đang hoạt động là 2.0.1.RELEASE. Điều đó dẫn đến sự khác biệt trong MySQL Connector - 5.1.45 so với 5.1.46. Tôi đã cập nhật phiên bản Spring Boot cho ứng dụng gặp lỗi này khi khởi động và bây giờ nó hoạt động.


Điều này đã giúp tôi!
Anand Varkey Philips,

Đã làm cho tôi! Tôi đang sử dụng phiên bản 1.5.8.RELEASE.
Ionuț Ciuta

15

Bạn chỉ cần xóa trình kết nối cũ hơn và tải xuống phiên bản mới (mysql-connector-java-5.1.46)


Nó đã làm việc. Tôi đã lãng phí gần 2 ngày để tìm giải pháp này. Cảm ơn.
Hemant Nagpal

11

Tôi đang sử dụng mysql 8.0.12 và cập nhật trình kết nối mysql thành mysql-connector-java-8.0.12 đã giải quyết được sự cố cho tôi.

Hy vọng nó sẽ giúp ai đó.


Nâng cấp lên ít nhất 5.1.46 hoặc phiên bản mới nhất như hôm nay chúng ta có 8.0.18. Điều này sẽ giúp giải quyết vấn đề.
Atul

9

Như đã đề cập trong repilies ở trên:

Bắt đầu với MySQL 8.0.4, nhóm MySQL đã thay đổi plugin xác thực mặc định cho máy chủ MySQL từ mysql_native_password thành caching_sha2_password.

Vì vậy, có ba cách để giải quyết vấn đề này:

 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

Đây có thể là các trình kết nối của bạn cho MySQL cần được cập nhật, vì MySQL8 đã thay đổi mã hóa mật khẩu - vì vậy các trình kết nối cũ hơn đang mã hóa chúng không chính xác.

Bạn có thể tìm thấy repo maven cho trình kết nối java tại đây .
Nếu bạn sử dụng plugin flyway , bạn cũng nên cân nhắc cập nhật nó !

Sau đó, bạn có thể chỉ cần cập nhật maven pom của mình bằng:

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

Hoặc đối với những người khác sử dụng Gradle , bạn có thể cập nhật build.gradle bằng:

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

Tất cả những gì bạn thực sự cần làm (ví dụ build.gradle)


5

Bạn đang gặp sự cố với phiên bản MySQL mới đi kèm với plugin "caching_sha2_password", hãy làm theo lệnh dưới đây để giải quyết.

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

Hoặc bạn chỉ có thể sử dụng lệnh dưới đây để giữ các đặc quyền của mình như cũ:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

Xin chào ý bạn là "your_db_name. *" Ở dòng thứ ba, đó là gì * đại diện cho
Sarath Mohan

Tên db nơi người dùng giả sử có quyền truy cập. hoặc bạn có thể chỉ sử dụng câu lệnh ALTER cuối cùng cũng sẽ giải quyết được sự cố của bạn. Trong ALTER, bạn chỉ cần chuyển tất cả tên người dùng của mình

CẤP TẤT CẢ QUYỀN RIÊNG TƯ TRÊN your_db_name. * CHO 'your_user_name' @ '%' được xác định bởi 'your_user_password';
Sarath Mohan

Được rồi, bạn đang gặp sự cố khi kết nối với DB phải không? Có nghĩa là bạn cũng đang chỉ định một số tên DB trong một chuỗi kết nối, cùng một DB cần được thêm vào thay cho your_db_name. hy vọng bạn rõ ràng

4

Tôi gặp phải vấn đề này trên NetBeans khi làm việc với một dự án làm sẵn từ cuốn sách Murach JSP này . Sự cố do sử dụng Trình kết nối 5.1.23 J với Cơ sở dữ liệu MySQL 8.0.13. Tôi cần thay thế trình điều khiển cũ bằng một trình điều khiển mới. Sau khi tải xuống Trình kết nối J, quá trình này thực hiện ba bước.

Cách thay thế Trình kết nối dự án NetBeans J:

  1. Tải xuống Trình kết nối J hiện tại từ đây . Sau đó, sao chép nó trong hệ điều hành của bạn.

  2. Trong NetBeans, bấm vào tab Tệp bên cạnh tab Dự án. Tìm mysql-connector-java-5.1.23.jar hoặc bất kỳ trình kết nối cũ nào bạn có. Xóa trình kết nối cũ này. Dán vào Trình kết nối mới.

  3. Bấm vào tab Dự án. Điều hướng đến thư mục Thư viện. Xóa trình kết nối mysql cũ. Nhấp chuột phải vào thư mục Libraries. Chọn Thêm lọ / thư mục. Điều hướng đến vị trí bạn đặt trình kết nối mới và chọn mở.

  4. Trong tab Dự án, nhấp chuột phải vào dự án. Chọn Giải quyết nguồn dữ liệu ở cuối menu bật lên. Nhấp vào Thêm kết nối. Tại thời điểm này, NetBeans bỏ qua và giả sử bạn muốn sử dụng trình kết nối cũ. Nhấp vào nút Quay lại để quay lại cửa sổ đã bỏ qua. Tháo trình kết nối cũ và thêm trình kết nối mới. Nhấp vào Tiếp theo và Kiểm tra Kết nối để đảm bảo nó hoạt động.

Để tham khảo video, tôi thấy điều này hữu ích. Đối với IntelliJ IDEA, tôi thấy điều này hữu ích.


Tôi nhận ra câu trả lời của tôi không hoàn toàn phù hợp. Tôi đã đăng câu trả lời NetBeans của mình ở đây vì câu hỏi của riêng tôi được đánh dấu là trùng lặp với câu hỏi này.
Jack J

4

Tôi đã làm chính xác cùng một vấn đề bằng cách sử dụng phụ thuộc bên dưới:

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

Tôi chỉ cần thay đổi sang phiên bản 46 và mọi thứ hoạt động.


3

Tôi nghĩ tốt hơn nên cập nhật gói lib "mysql-connector" của bạn, vì vậy cơ sở dữ liệu vẫn có thể an toàn hơn.

Tôi đang sử dụng mysql của phiên bản 8.0.12. Khi tôi cập nhật mysql-connector-java lên phiên bản 8.0.11, sự cố đã không còn nữa.


2

Nếu bạn có thể cập nhật trình kết nối của mình lên một phiên bản hỗ trợ plugin xác thực mới của MySQL 8, thì hãy làm điều đó. Nếu đó không phải là một tùy chọn vì lý do nào đó, hãy thay đổi phương thức xác thực mặc định của người dùng cơ sở dữ liệu của bạn thành phương thức gốc.


0

loại bỏ tệp kết nối .jar nếu bạn đã thêm tệp jar trình kết nối nhiều phiên bản chỉ thêm tệp jar trình kết nối phù hợp với phiên bản sql của bạn.


0

Một nguyên nhân khác có thể là do bạn đang trỏ sai cổng.

Đảm bảo rằng bạn đang thực sự trỏ đến máy chủ SQL phù hợp. Bạn có thể có một cài đặt mặc định của MySQL chạy trên 3306 nhưng bạn có thể thực sự cần một phiên bản MySQL khác.

Kiểm tra các cổng và chạy một số truy vấn đối với db.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.