Kimlik doğrulama eklentisi yüklenemiyor 'caching_sha2_password' sorunu nasıl çözülür


111

Tutulmada, uygulamamı başlattığımda bunu aldım - Kullanılacak lehçeyi bulamadım. java.sql.SQLException: 'caching_sha2_password' kimlik doğrulama eklentisi yüklenemiyor.

java.sql.SQLException adresinde: 'caching_sha2_password' kimlik doğrulama eklentisi yüklenemiyor. com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) at com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) at com.mysql.jdbc.MysqlIO.proceedHandshake. java: 1746) com.mysql.jdbc.MysqlIO.do adresinde com.mysql.jdbc.ConnectionImpl.coreConnect adresinde (ConnectionImpl.java:2191) com.mysql.jdbc.ConnectionImpl adresinde com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226). com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) at com.mysql.jdbc.ConnectionImpl adresinde connectOne TryOnly (ConnectionImpl.java:2222) com.mysql.jdbc adresinde (ConnectionImpl.java:779) .JDBC4Connection. (JDBC4Connection.java:47) sun.reflect.NativeConstructorAccessorImpl adresinde.

Yanıtlar:


168

MySQL 8.0.4 ile başlayarak, nereden MySQL sunucusu için varsayılan kimlik doğrulama eklentisi değişti mysql_native_password için caching_sha2_password .

Sorunu çözmek için aşağıdaki komutu çalıştırabilirsiniz.

örnek kullanıcı adı / şifre => öğrenci / şifre123

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

Ayrıntılar için resmi sayfaya bakın: MySQL Referans Kılavuzu


8
Bu işe yarasa da, daha güvenli sha2_caching kimlik doğrulama eklentisini kullanmanıza olanak tanıyan MySQL Connector / J sürümünü (diğer yanıtların bazılarında önerildiği gibi) yükseltmek daha iyidir.
Mark Rotteveel

@MarkRotteveel Evet! Ben de buna katılıyorum.
Gaurav

@MarkRotteveel nasıl?
theonlygusti

4
@theonlygusti MySQL Connector / J'yi en az 5.1.46'ya veya - daha iyisi - 8.0.14'e güncellemeniz gerekir.
Mark Rotteveel

@MarkRotteveel bunu nasıl yaparım? stackoverflow.com/questions/54413365/…
theonlygusti

66

Başkaları kök sorununa işaret ettiler, ancak benim durumumda dbeaver kullanıyordum ve başlangıçta dbeaver ile mysql bağlantısını kurarken yanlış mysql sürücüsünü seçiyordum (yanıt için burayı kullanın: https://github.com/dbeaver/dbeaver/ sorunlar / 4691 # issuecomment-442173584 )

Aşağıdaki şekilde MySQL seçiminin seçilmesi, sürücü veritabanı bilgi ipucunda görülebilen mysql 4+ olduğundan bahsedilen hatayı verecektir.


Bu hata için bu şekilde en iyi mysql 4+ seçimini seçmek bu sorgulamada belirtilen hatayı verecektir.


MySQL sürücüsünü seçmek yerine, aşağıdaki şekilde gösterilen MySQL 8+ sürücüsünü seçin.


görüntü açıklamasını buraya girin


6
Teşekkürler, bu tam olarak benim sorunumdu. O zaman başka bir hata mı aldınız: "Genel Anahtar Erişimine izin verilmiyor"?
Tomáš Zato - Monica'yı Yeniden Etkinleştir

İlginçtir, yukarıdakilerden sonra dbeaver tabloları yükledi.
Paul

4
TEŞEKKÜR EDERİM. Bu bana çok yardımcı oldu. DBeaver'da hala "Public Ket Retrieval'e izin verilmez" hatasını alanlar için, bunu burada çözen bir bağlantı buldum .
jpisty

3
Public key retrieval is not allowed
aderchox

43

Mysql-connector "lib paketinizi aşağıdaki gibi mysql sürümünüzle yükseltin 8.0.13 sürümünü kullanıyorum ve pom'da sürümü değiştirdim:

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

Sorunum bundan sonra çözüldü.


1
Faydalı cevap için teşekkürler. Diğerleri için, en son sürümü bulmak için lütfen bu bağlantıyı kullanın; mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf

31

Yanlış mysql_connector kullanıyor olabilirsiniz.

Aynı mysql sürümünün bağlayıcısını kullanın


16

Bu hatayı bir Spring Boot uygulamasında vuruyordum, ancak başka birinde değil. Son olarak, çalışmayan versiyondaki Spring Boot versiyonunun 2.0.0.RELEASE ve çalışan versiyonun 2.0.1.RELEASE olduğunu buldum. Bu, MySQL Bağlayıcısı - 5.1.45 ile 5.1.46 arasında bir fark yarattı. Başlangıçta bu hatayı veren uygulama için Spring Boot sürümünü güncelledim ve şimdi çalışıyor.


Bu bana yardımcı oldu!
Anand Varkey Philips

Benim için çalıştı! 1.5.8.RELEASE sürümünü kullanıyordum.
Ionuț Ciuta

15

Sadece eski bağlayıcınızı silmeniz ve yeni sürümü indirmeniz gerekir (mysql-connector-java-5.1.46)


İşe yaradı. Bu çözümü bulmak için neredeyse 2 günümü boşa harcadım. Teşekkürler.
Hemant Nagpal

11

Mysql 8.0.12 kullanıyorum ve mysql konektörünü mysql-connector-java-8.0.12'ye güncellemek sorunu benim için çözdü.

Umarım birine yardımcı olur.


En az 5.1.46'ya veya bugünkü gibi en son sürüm 8.0.18'e yükseltin. Bu, sorunun çözülmesine yardımcı olacaktır.
Atul

9

Yukarıdaki yanıtlarda da belirtildiği gibi:

MySQL 8.0.4'ten başlayarak, MySQL ekibi MySQL sunucusu için varsayılan kimlik doğrulama eklentisini mysql_native_password'den caching_sha2_password'e değiştirdi.

Dolayısıyla, bu sorunu çözmenin üç yolu vardır:

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

8

Bu, MySQL8 şifrelerin şifrelenmesini değiştirdiği için güncellenmesi gereken MySQL bağlayıcılarınız olabilir - bu nedenle eski bağlayıcılar bunları yanlış şifreliyor.

Java konektörü için maven deposu burada bulunabilir .
Flyway eklentisi kullanıyorsanız , güncellemeyi de düşünmelisiniz !

O zaman maven pom'unuzu aşağıdakilerle kolayca güncelleyebilirsiniz :

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

Veya kullanmak diğerleri için Gradle , güncelleyebilirsiniz build.gradle ile:

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

Gerçekten yapmanız gereken her şey (build.gradle örneği)


5

"Caching_sha2_password" eklentisiyle gelen yeni MySQL sürümüyle ilgili sorun yaşıyorsunuz, çözmek için aşağıdaki komutu izleyin.

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

Veya ayrıcalıklarınızı olduğu gibi korumak için aşağıdaki komutu kullanabilirsiniz:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

Merhaba sen ne demek olduğunu * için temsil nedir üçüncü satırda "your_db_name *."
Sarath Mohan

Kullanıcının erişimi alması gereken db adı. ya da yalnızca sorununuzu çözecek olan son ALTER ifadesini kullanabilirsiniz.

DB_adınız * ÜZERİNDEKİ TÜM AYRICALIKLARI VERİN. * 'Kullanıcı_adınız' @ '%', 'kullanıcı_parolanız' ile tanımlanan 'KİŞİSEL_Adınız';
Sarath Mohan

Tamam, DB'ye bağlanırken sorunla karşılaşıyorsunuz değil mi? Ayrıca, bir bağlantı dizesinde bir DB adı da belirttiğiniz anlamına gelir, aynı DB'nin_db_adınız yerine eklenmesi gerekir. umarım temizlersin

4

Bu Murach JSP kitabından hazır bir projeyle çalışırken NetBeans'te bu sorunla karşılaştım . Sorunun nedeni 5.1.23 Bağlayıcı J'nin MySQL 8.0.13 Veritabanı ile kullanılmasıydı. Eski sürücüyü yenisiyle değiştirmem gerekiyordu. Bağlayıcı J'yi indirdikten sonra, bu işlem üç adımda gerçekleşti.

NetBeans projesi Bağlayıcısı J nasıl değiştirilir:

  1. Mevcut Bağlayıcı J'yi buradan indirin . Ardından işletim sisteminize kopyalayın.

  2. NetBeans'te, Projeler sekmesinin yanındaki Dosyalar sekmesine tıklayın. Mysql-connector-java-5.1.23.jar dosyasını veya sahip olduğunuz eski bağlayıcıyı bulun. Bu eski bağlayıcıyı silin. Yeni Bağlayıcıya yapıştırın.

  3. Projeler sekmesine tıklayın. Kitaplıklar klasörüne gidin. Eski mysql konektörünü silin. Kitaplıklar klasörüne sağ tıklayın. Jar / Klasör Ekle'yi seçin. Yeni bağlayıcıyı yerleştirdiğiniz konuma gidin ve aç'ı seçin.

  4. Proje sekmesinde, projeye sağ tıklayın. Açılır menünün altındaki Veri Kaynaklarını Çöz'ü seçin. Bağlantı Ekle'ye tıklayın. Bu noktada NetBeans ileri atlar ve eski bağlayıcıyı kullanmak istediğinizi varsayar. Atlanan pencereye geri dönmek için Geri düğmesini tıklayın. Eski konektörü çıkarın ve yeni konektörü ekleyin. Çalıştığından emin olmak için İleri'yi ve Bağlantıyı Test Et'i tıklayın.

Video Başvuru için buldum bu yararlı olduğu. IntelliJ IDEA, ben buldum bu yararlı olduğu.


Cevabımın tamamen alakalı olmadığının farkındayım. NetBeans cevabımı buraya gönderdim çünkü kendi sorum bu sorunun kopyası olarak işaretlendi.
Jack J

4

Aşağıdaki bağımlılığı kullanarak tam olarak aynı sorunu yaptım:

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

46 sürümüne geçiyorum ve her şey çalışıyor.


3

"Mysql-connector" lib paketinizi güncellemenin daha iyi olacağını düşünüyorum, böylece veritabanı daha güvenli olabilir.

8.0.12 sürümünün mysql'sini kullanıyorum. Mysql-connector-java'yı 8.0.11 sürümüne güncellediğimde sorun gitmişti.


2

Bağlayıcınızı MySQL 8'in yeni kimlik doğrulama eklentisini destekleyen bir sürüme güncelleyebiliyorsanız, bunu yapın. Herhangi bir nedenle bu bir seçenek değilse, veritabanı kullanıcınızın varsayılan kimlik doğrulama yöntemini yerel olarak değiştirin.


0

Birden çok sürüm bağlayıcı kavanoz dosyasını eklediyseniz connect .jar dosyasını kaldırın, yalnızca sql sürümünüzle eşleşen bağlayıcı kavanoz dosyasını ekleyin.


0

Başka bir neden, yanlış bağlantı noktasına işaret ediyor olmanız olabilir.

Gerçekte doğru SQL sunucusunu işaret ettiğinizden emin olun. 3306'da çalışan varsayılan bir MySQL kurulumunuz olabilir, ancak aslında farklı bir MySQL örneğine ihtiyacınız olabilir.

Bağlantı noktalarını kontrol edin ve db ile ilgili bazı sorguları çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.