Sila tingkatkan klien MySQL: MySQL 8.0 - Pelanggan tidak menyokong protokol pengesahan yang diminta oleh pelayan
P粉574695215
P粉574695215 2023-10-10 09:34:48
0
2
598

Atas sebab tertentu saya tidak dapat mewujudkan sambungan mudah ke pelayan. Saya memasang pangkalan data MySQL Community 8.0 terkini bersama-sama dengan Node.JS menggunakan tetapan lalai.

Ini kod node.js saya

var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", insecureAuth : true }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); });

Berikut ialah ralat yang terdapat dalam command prompt:

C:Usersmysql-test>node app.js C:Usersmysql-testnode_modulesmysqllibprotocolParse r.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:Usersmysql- testnode_modulesmysqllibprotocolsequencesSequence.js:52:14) at Handshake.ErrorPacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolsequencesHandshake.js:130:18) at Protocol._parsePacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolProtocol.js:279:23) at Parser.write (C:Usersmysql-testnode_modulesmys qllibprotocolParser.js:76:12) at Protocol.write (C:Usersmysql-testnode_modulesm ysqllibprotocolProtocol.js:39:16) at Socket. (C:Usersmysql-testnode_modul esmysqllibConnection.js:103:28) at Socket.emit (events.js:159:13) at addChunk (_stream_readable.js:265:12) at readableAddChunk (_stream_readable.js:252:11) at Socket.Readable.push (_stream_readable.js:209:10) -------------------- at Protocol._enqueue (C:Usersmysql-testnode_module smysqllibprotocolProtocol.js:145:48) at Protocol.handshake (C:Usersmysql-testnode_modul esmysqllibprotocolProtocol.js:52:23) at Connection.connect (C:Usersmysql-testnode_modul esmysqllibConnection.js:130:18) at Object. (C:Usersmysql-testserver.js: 11:5) at Module._compile (module.js:660:30) at Object.Module._extensions..js (module.js:671:10) at Module.load (module.js:573:32) at tryModuleLoad (module.js:513:12) at Function.Module._load (module.js:505:3) at Function.Module.runMain (module.js:701:10)

Saya telah membaca sesuatu seperti: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507

Tetapi saya masih tidak pasti bagaimana untuk menyelesaikan masalah saya.

P粉574695215
P粉574695215

membalas semua (2)
P粉161939752

Ringkasan

  1. Jika anda hanya mahu menghapuskan pepijat,dengan kos risiko keselamatan projek(cth. ini hanyalah projek peribadi atau persekitaran pembangunan), gunakan@jawapan Pras--ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'然后刷新权限
  2. Jika anda ingin membetulkannya dan tidak tahu mengapa, hanya pasang dan gunakanmysql2(而不是mysql)并使用它 -npm我 mysql2mysql = require('mysql2');.
  3. Jika anda seorang pembangun yang ingin tahu dan sentiasa bersemangat untuk belajar, baca terus... :)

Apa yang berlaku?

Kita perlu memikirkan dahulu apa yang berlaku.

MySQL 8 menyokong kaedah pengesahan boleh pasang. Secara lalai, salah satu daripadanya bernamacaching_sha2_password的密码,而不是我们的旧mysql_native_password(sumber) digunakan. Nampaknya, algoritma penyulitan menggunakan berbilang jabat tangan adalah lebih selamat daripada laluan kata laluan biasa yang digunakan dalam24. Tahun!

Kini, masalahnya ialah pakej dalam Nodemysqljs(使用npm i mysqlyang memasang dan menggunakannya dalam kod Node) tidak menyokong kaedah pengesahan lalai baharu ini untuk MySQL 8 lagi. Isunya di sini:https://github.com/mysqljs/mysql/issues/1507 a> Sehingga Julai 2019, masih dibuka tiga tahun kemudian.

Kemas kini Jun 2019:Ada PR baharu dalammysqljs a> untuk membetulkannya sekarang!

Kemas Kini Februari 2020:Nampaknyadirancang untuk masuk dalam mysqljs versi 3.

Kemas kini Julai 2020:Nampaknya ia belum masuklagi (sekurang-kurangnya April 2020), tetapimendakwabahawa node-mysql2 menyokong suispermintaan pengesahanJikanode-mysql2berfungsi untuk anda, sila tinggalkan komen di bawah - Saya akan mengujinya sendiri kemudian.

Kemas kini April 2021:Masalahnya nampaknya masih wujud, hanya 3 hari yang lalu,seseorang mencipta garpudan melaksanakannya - tetapi belum secara rasmi dalam pakej mysql.js lagi. Selain itu, berdasarkan komen di bawah, nampaknyapakej mysql2berfungsi dengan baik danmenyokong penukaran pengesahandengan betul.


Pilihan semasa anda

Pilihan 1) [Tidak Disyorkan] Turunkan taraf "MySQL" untuk menggunakan "mysql_native_password" lama untuk pengesahan

Inilah yang semua orang cadangkan di sini (sepertijawapan terbaik di atas). Anda hanya perlu memasukkan kaedahmysql并运行一个查询,说明root可以使用旧的mysql_native_passworduntuk mengesahkan:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

Berita baiknya ialah, kehidupan menjadi lebih mudah dan anda masih boleh menggunakan alatan lama yang bagus seperti Sequel Pro tanpasebarang soalan. Tetapi perkaranya ialah, anda tidak mengambil kesempatan daripada sesuatu yang lebih selamat (dan bagus, baca di bawah).

Pilihan 2) [Meh...] Gantikan pakej "Nod" dengan MySQL Connecter X DevAPI

MySQLIa berfungsi seperti sokonganuntuk komunikasi protokolX. )

Sayangnya anda telah berpindah dari pakej lamacaching_sha2_password身份验证的超级按钮。 (只需确保您使用端口33060yang setiap daripada kita biasa dan bergantung harap.Bonusnya ialah apl anda kini lebih selamat dan anda boleh memanfaatkan banyak ciri baharu yang tidak ditawarkan oleh rakan lama kami yang baik! Lihat sahaja

X DevAPI Tutorial

dan anda akan mendapati ia mempunyai banyak ciri seksi baharu yang boleh anda gunakan. Anda hanya perlu membayar harga keluk pembelajaran, yang dijangka datang dengan sebarang peningkatan teknologi. :)mysqlPS. Malangnya, pakej XDevAPI ini belum mempunyai definisi jenis (yang TypeScript faham), jadi jika anda menggunakan

typescript

, anda akan menghadapi masalah. Saya cuba menggunakan dts-gen dan dtsmake untuk menjana .d.ts tanpa berjaya. Jadi sila ingat ini.

Pilihan 3) [Disyorkan] Gantikan "mysql.js" dengan pakej "mysql2.js"

Seperti yang dinyatakan di atas, pakej mysql (pautan pakej NPM)masih mengalami masalah ini(sehingga April 2021). Tetapi pakej mysql2 (pautan pakej NPM) tidak. Jadi berikut mungkin jawapan yang mudah!

npm un mysql && npm i mysql2

Nota,mysql2是流行的mysql的一个分支,但它的受欢迎程度(4 月份mysql2每周下载量为 62 万次) 2020 年)已接近原始软件包(2021 年 4 月mysql720K muat turun setiap minggu), jadi nampaknya munasabah untuk menukar!

    P粉198749929

    Laksanakan pertanyaan berikut dalam MYSQL Workbench

    更改用户 'root'@'localhost' 通过 mysql_native_password BY 'password' 进行识别;

    di manarootadalah pengguna andalocalhostsebagai URL anda danpasswordsebagai kata laluan anda

    Kemudian jalankan pertanyaan ini untuk memuat semula kebenaran:

    刷新权限;

    Selepas melakukan ini cuba sambung menggunakan nod.

    Jika ini tidak berkesan, cuba tanpa bahagian@'localhost'.

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!