प्रमाणीकरण प्लगइन 'caching_sha2_password' समस्या को लोड करने में असमर्थ को कैसे हल करें


108

ग्रहण में जब मैंने अपना आवेदन शुरू किया तो मुझे यह मिला - उपयोग करने के लिए बोली की खोज नहीं कर सका। java.sql.SQLException: प्रमाणीकरण प्लगइन 'caching_sha2_password' को लोड करने में असमर्थ।

java.sql.SQLException पर: प्रमाणीकरण प्लगइन लोड करने में असमर्थ 'caching_sha2_password'। com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) पर com.mysql.jdbc.SQLError.czeQQxxception (SQLError.java:864) पर com.mysql.jdl.jdl.jdbl.jdbl.jdbc। java: 1746) पर com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) com.mysql.jdbc.Connection.mpl.coreConnect (ConnectionImpl.java:2191) पर com.mysq.jqljjc। connectOneTryOnly (ConnectionImpl.java:2222) com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) पर com.mysql.jdbc.ConnectionImpl (ConnectionImpl.java:779) पर संपर्क करें। .JDBC4Connection। (JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl

जवाबों:


165

MySQL 8.0.4 से शुरू करते हुए, उन्होंने mysql_native_password से लेकर caching_sha2_password तक के लिए डिफ़ॉल्ट प्रमाणीकरण प्लगइन को बदल दिया है ।

आप समस्या को हल करने के लिए नीचे कमांड चला सकते हैं।

नमूना उपयोगकर्ता नाम / पासवर्ड => छात्र / पास १२

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

विवरण के लिए आधिकारिक पृष्ठ देखें: MySQL संदर्भ मैनुअल


8
यद्यपि यह काम करता है, MySQL कनेक्टर / J संस्करण (जैसा कि कुछ अन्य उत्तरों द्वारा सुझाया गया है) को अपग्रेड करना बेहतर है क्योंकि इससे आप अधिक सुरक्षित sha2_caching प्रमाणीकरण प्लगइन का उपयोग कर सकते हैं।
मार्क रोटेटेवेल

@MarkRotteveel हाँ! मैं उस पर भी सहमत हूं।
गौरव 3

@MarkRotteveel कैसे?
theonlygusti

4
@theonlygusti आपको MySQL कनेक्टर / J को कम से कम 5.1.46, या इससे बेहतर - 8.0.14 पर अपडेट करना होगा।
मार्क रोटेवेल

@MarkRotteveel मैं ऐसा कैसे करूं? stackoverflow.com/questions/54413365/…
theonlygusti

62

अन्य लोगों ने मूल मुद्दे की ओर इशारा किया है, लेकिन मेरे मामले में मैं dbeaver का उपयोग कर रहा था और शुरू में dbeaver के साथ mysql कनेक्शन सेट करते समय गलत mysql ड्राइवर का चयन कर रहा था (जवाब के लिए यहां क्रेडिट: https://github.com/deaeaver/dbeaver/ मुद्दे / 4691 # जारी करना -442173584 )

नीचे दिए गए आंकड़े में MySQL विकल्प का चयन करने से त्रुटि का उल्लेख किया जाएगा क्योंकि ड्राइवर mysql 4+ है जिसे डेटाबेस सूचना टिप में देखा जा सकता है।


इस आंकड़े में शीर्ष mysql 4+ विकल्प का चयन करने में त्रुटि के लिए इस quesiton में उल्लिखित त्रुटि दी जाएगी


MySQL ड्राइवर का चयन करने के बजाय नीचे दिए गए चित्र में दिखाए गए MySQL 8+ ड्राइवर का चयन करें।


यहाँ छवि विवरण दर्ज करें


6
धन्यवाद, यह वास्तव में मेरी समस्या थी। क्या तब आपको एक और त्रुटि मिली: "सार्वजनिक कुंजी पुनर्प्राप्ति की अनुमति नहीं है"?
टॉम ज़ातो -

दिलचस्प है, उपरोक्त के बाद नहीं, dbeaver ने तालिकाओं को लोड किया।
पॉल

3
धन्यवाद। इसने मेरी बहुत मदद की। उन लोगों के लिए जो अभी भी "पब्लिक केट रिट्रीवल की अनुमति नहीं है" DBeaver में त्रुटि मुझे एक लिंक मिला है जो यहां हल करता है
jpisty

2
Public key retrieval is not allowed
एड्रॉक्सॉक्स

42

नीचे दिए गए अपने mysql वर्जन के साथ अपने mysql-कनेक्टर "लिबरल पैकेज को अपग्रेड करें जैसे मैं 8.0.13 वर्जन का उपयोग कर रहा हूं और pom में मैंने वर्जन को बदल दिया है:

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

मेरी समस्या इसके बाद हल हो गई है।


1
उपयोगी उत्तर के लिए धन्यवाद। अन्य लोगों के लिए, नवीनतम संस्करण को खोजने के लिए, कृपया इस लिंक का उपयोग करें; mvnrepository.com/artifact/mysql/mysql-connector-java
यूसुफ


16

मैं एक स्प्रिंग बूट ऐप में इस त्रुटि को मार रहा था, लेकिन दूसरे में नहीं। अंत में, मैंने पाया कि काम न करने वाला स्प्रिंग बूट संस्करण 2.0.0 था। कृपया और जो काम कर रहा था वह 2.0.1 था। कृपया। जिसके कारण MySQL कनेक्टर - 5.1.45 बनाम 5.1.46 में अंतर आया। मैंने उस ऐप के लिए स्प्रिंग बूट संस्करण को अपडेट किया जो स्टार्टअप में इस त्रुटि को फेंक रहा था और अब यह काम करता है।


इससे मुझे मदद मिली!
आनंद वर्की फिलिप्स

मेरे लिए काम किया! मैं संस्करण 1.5.8 का उपयोग कर रहा था। कृपया।
आयनू सियोटा

15

आपको अपने पुराने कनेक्टर को हटाने और नए संस्करण (mysql-कनेक्टर-java-5.1.46) डाउनलोड करने की आवश्यकता है


इसने काम कर दिया। मैंने इस समाधान को खोजने में लगभग 2 दिन बर्बाद कर दिए। धन्यवाद।
हेमंत नागपाल

11

मैं mysql 8.0.12 का उपयोग कर रहा हूं और mysql-कनेक्टर-java-8.0.12 को mysql कनेक्टर को अपडेट करके मेरे लिए समस्या हल कर दी है।

आशा है कि यह किसी की मदद करता है।


कम से कम 5.1.46 या नवीनतम संस्करण को अपग्रेड करें जैसे आज हमारे पास 8.0.18 है। यह समस्या को हल करने में मदद करेगा।
अतुल

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

7

यह MySQL के लिए आपके कनेक्टर हो सकते हैं जिन्हें अपडेट करने की आवश्यकता है, क्योंकि MySQL8 ने पासवर्ड के एन्क्रिप्शन को बदल दिया है - इसलिए पुराने कनेक्टर गलत तरीके से एन्क्रिप्ट हो रहे हैं।

जावा कनेक्टर के लिए मावेन रेपो यहां पाया जा सकता है
यदि आप फ्लाईवे प्लगइन का उपयोग करते हैं , तो आपको इसे अपडेट करने पर भी विचार करना चाहिए !

तो आप बस के साथ अपने मावेन पोम को अपडेट कर सकते हैं :

<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

आप नए MySQL संस्करण के साथ समस्या कर रहे हैं जो "caching_sha2_password" प्लगइन के साथ आया है, इसे हल करने के लिए नीचे दिए गए आदेश का पालन करें।

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। *" से क्या मतलब है तीसरी पंक्ति पर वह क्या है * के लिए प्रतिनिधित्व करते हैं
सारथ मोहन

Db नाम जहां उपयोगकर्ता अभिगम प्राप्त करने के लिए लगता है। या आप केवल पिछले अंतिम बयान का उपयोग कर सकते हैं जो आपके मुद्दे को भी हल करेगा। ALTER में आपको बस अपना यूजर नेम सभी

अपने_db_name पर सभी PRIVILEGES प्राप्त करें। * 'your_user_name' @ '%' को 'your_user_password' द्वारा पहचाना गया;
सारथ मोहन

ठीक है, आप DB सही से कनेक्ट करते समय समस्या का सामना कर रहे हैं? मतलब आप कनेक्शन स्ट्रिंग में कुछ DB नाम निर्दिष्ट कर रहे हैं, उसी DB को आपके_db_name के स्थान पर जोड़ा जाना चाहिए। आशा है कि आप स्पष्ट हैं

4

मैं इस समस्या में भाग गया जब इस मुरच JSP पुस्तक से तैयार परियोजना के साथ काम कर रहा था । MySQL 8.0.13 डेटाबेस के साथ 5.1.23 कनेक्टर J का उपयोग करके समस्या उत्पन्न हुई थी। मुझे पुराने ड्राइवर को एक नए के साथ बदलने की आवश्यकता थी। कनेक्टर जे को डाउनलोड करने के बाद, इसने तीन कदम उठाए।

NetBeans प्रोजेक्ट कनेक्टर J को कैसे बदलें:

  1. वर्तमान कनेक्टर J को यहाँ से डाउनलोड करें । फिर इसे अपने ओएस में कॉपी करें।

  2. NetBeans में, प्रोजेक्ट टैब के बगल में मौजूद फाइल टैब पर क्लिक करें। Mysql-कनेक्टर-java-5.1.23.jar या आपके पास जो भी पुराना कनेक्टर है उसे ढूंढें। इस पुराने कनेक्टर को हटा दें। नए कनेक्टर में पेस्ट करें।

  3. प्रोजेक्ट्स टैब पर क्लिक करें। लाइब्रेरी फ़ोल्डर में नेविगेट करें। पुराने mysql कनेक्टर को हटाएं। लाइब्रेरी फ़ोल्डर पर राइट क्लिक करें। जोड़ें जार / फ़ोल्डर का चयन करें। उस स्थान पर नेविगेट करें जहां आपने नया कनेक्टर लगाया है, और खुले का चयन करें।

  4. प्रोजेक्ट टैब में, प्रोजेक्ट पर राइट क्लिक करें। पॉपअप मेनू के निचले भाग पर डेटा स्रोत का चयन करें। ऐड कनेक्शन पर क्लिक करें। इस बिंदु पर NetBeans आगे की ओर झुक जाता है और मान लेता है कि आप पुराने कनेक्टर का उपयोग करना चाहते हैं। वापस जाने के लिए वापस बटन पर क्लिक करें। पुराने कनेक्टर को निकालें, और नया कनेक्टर जोड़ें। यह सुनिश्चित करने के लिए अगला और परीक्षण कनेक्शन पर क्लिक करें कि यह काम करता है।

वीडियो संदर्भ के लिए, मुझे यह उपयोगी लगा। IntelliJ IDEA के लिए, मुझे यह उपयोगी लगा।


मुझे लगता है कि मेरा जवाब पूरी तरह से प्रासंगिक नहीं है। मैंने अपना नेटबीन्स उत्तर यहां पोस्ट किया क्योंकि मेरा अपना प्रश्न इस प्रश्न के डुप्लिकेट के रूप में चिह्नित है।
जैक जे

4

मैंने नीचे दी गई निर्भरता का उपयोग करते हुए ठीक यही मुद्दा दिया था:

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

मैं सिर्फ संस्करण 46 में बदलता हूं और सब कुछ काम करता है।


3

मुझे लगता है कि आपके "mysql-कनेक्टर" काम के पैकेज को अपडेट करना बेहतर है, इसलिए डेटाबेस अभी भी अधिक सुरक्षित हो सकता है।

मैं संस्करण 8.0.12 के mysql का उपयोग कर रहा हूं। जब मैंने mysql-कनेक्टर-जावा को संस्करण 8.0.11 में अपडेट किया, तो समस्या दूर हो गई।


2

यदि आप अपने कनेक्टर को एक संस्करण में अपडेट कर सकते हैं, जो MySQL 8 के नए प्रमाणीकरण प्लगइन का समर्थन करता है, तो ऐसा करें। यदि वह किसी कारण से विकल्प नहीं है, तो अपने डेटाबेस उपयोगकर्ता के मूल प्रमाणीकरण विधि को मूल में बदलें।


0

कनेक्ट .jar फ़ाइल को हटा दें यदि आपने कई संस्करण कनेक्टर जार फ़ाइल जोड़ी है तो केवल कनेक्टर जार फ़ाइल जोड़ें जो आपके sql संस्करण के साथ मेल खाता हो।


0

दूसरा कारण यह हो सकता है कि आप गलत पोर्ट की ओर इशारा कर रहे हैं।

सुनिश्चित करें कि आप वास्तव में सही SQL सर्वर की ओर इशारा कर रहे हैं। आपके पास 3306 पर चलने वाली MySQL की डिफ़ॉल्ट स्थापना हो सकती है लेकिन आपको वास्तव में एक अलग MySQL उदाहरण की आवश्यकता हो सकती है।

बंदरगाहों की जाँच करें और db के खिलाफ कुछ क्वेरी चलाएँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.