Node.js MySQL 8.0 को प्रमाणित नहीं कर सकते हैं



authentication mysql-8.0 (1)

MySQL 8.0 एक नए डिफ़ॉल्ट प्रमाणीकरण प्लगइन का उपयोग करता है - caching_sha2_password - जबकि MySQL 5.7 ने एक अलग - mysql_native_password उपयोग किया है। वर्तमान में, MySQL के लिए समुदाय Node.js ड्राइवर नए सर्वर प्लगइन के लिए संगत क्लाइंट-साइड प्रमाणीकरण तंत्र का समर्थन नहीं करते हैं।

पुराने प्रमाणीकरण प्लग इन का उपयोग करने के लिए उपयोगकर्ता खाते के प्रकार में परिवर्तन करने के लिए एक संभावित समाधान है:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';

या एक अलग बनाएं जो उसी प्लगइन का उपयोग करता है:

CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

समस्या को ठीक से संबोधित करने के लिए पाइपलाइन में एक पुल अनुरोध है।

एक अन्य विकल्प official MySQL Node.js कनेक्टर (पूर्ण प्रकटीकरण: मैं मुख्य देव हूं) का उपयोग करना है, जो एक्स प्रोटोकॉल पर आधारित है और पहले से ही नए प्रमाणीकरण मोड का समर्थन करता है।

मेरे पास एक Node.js कार्यक्रम है जो रूट खाते के साथ एक स्थानीय MySQL डेटाबेस से जुड़ता है (यह उत्पादन सेटअप नहीं है)। यह वह कोड है जो कनेक्शन बनाता है:

const mysql = require('mysql');

const dbConn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'myRootPassword',
    database: 'decldb'
});

dbConn.connect(err => {
    if (err) throw err;
    console.log('Connected!');
});

इसने MySQL 5.7 के साथ काम किया, लेकिन MySQL 8.0 को स्थापित करने के बाद से Node.js ऐप को शुरू करते समय मुझे यह त्रुटि मिलती है:

> node .\api-server\main.js
[2018-05-16T13:53:53.153Z] Server launched on port 3000!
C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Parser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
    at Handshake.ErrorPacket (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\sequences\Handshake.js:130:18)
    at Protocol._parsePacket (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Protocol.js:279:23)
    at Parser.write (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Parser.js:76:12)
    at Protocol.write (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Protocol.js:39:16)
    at Socket.<anonymous> (C:\Users\me\project\node_server\node_modules\mysql\lib\Connection.js:103:28)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    --------------------
    at Protocol._enqueue (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Protocol.js:145:48)
    at Protocol.handshake (C:\Users\me\project\node_server\node_modules\mysql\lib\protocol\Protocol.js:52:23)
    at Connection.connect (C:\Users\me\project\node_server\node_modules\mysql\lib\Connection.js:130:18)
    at Object.<anonymous> (C:\Users\me\project\node_server\main.js:27:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)

ऐसा लगता है कि रूट खाता एक नया पासवर्ड हैशिंग विधि का उपयोग करता है:

> select User,Host,plugin from user where User="root";
+------+-----------+-----------------------+
| User | Host      | plugin                |
+------+-----------+-----------------------+
| root | localhost | caching_sha2_password |
+------+-----------+-----------------------+

... लेकिन मुझे नहीं पता कि Node.js इसे कनेक्ट करने में असमर्थ क्यों है। मैंने सभी npm संकुल को अद्यतन किया है और यह अभी भी एक मुद्दा है।

मैं नया पासवर्ड हैशिंग विधि रखना चाहूंगा। क्या मैं अभी भी यह कनेक्शन काम कर सकता हूं? क्या मुझे MySQL Node.js पैकेज के अपडेट का इंतजार करना है, या मेरी तरफ सेटिंग बदलना है?





mysql-8.0