Klien tidak mendukung protokol autentikasi yang diminta oleh server nodejs

Baru-baru ini saya sedang mengerjakan Node. aplikasi js. Dalam aplikasi saya, saya menghadapi masalah koneksi dengan server MySQL. Semuanya baik-baik saja, saya masih mendapatkan kesalahan berikut

Kesalahan. ER_NOT_SUPPORTED_AUTH_MODE. Klien tidak mendukung protokol autentikasi yang diminta oleh server;

Pada artikel ini, saya akan menunjukkan kepada Anda mengapa kesalahan ini terjadi dan bagaimana cara mengatasi kesalahan ini

Saat melalui Googling masalah ini, saya mengetahui bahwa MySQL 8. 0 menggunakan plugin otentikasi caching_sha2_password_ daripada mysql_native_password dan Node. Paket js Mysql menggunakan mysql_native_password plugin autentikasi

Larutan

Dalam situasi ini, Anda dapat mengubah kata sandi pengguna saat ini sesuai dengan plugin otentikasi mysql_native_password atau Anda perlu membuat pengguna baru dengan plugin otentikasi mysql_native_password

Ubah kata sandi pengguna saat ini menjadi plugin otentikasi

Untuk mengubah kata sandi pengguna saat ini menjadi plugin otentikasi mysql_native_password_, Anda harus masuk ke baris perintah MySQL dan menjalankan perintah berikut. Perhatikan bahwa

FLUSH PRIVILEGES;
4 adalah nama pengguna dan
FLUSH PRIVILEGES;
5 adalah kata sandi untuk pengguna tersebut

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

Jangan lupa untuk menyiram hak istimewa

FLUSH PRIVILEGES;

Dan itu saja, logout ke baris perintah MySQL

quit;
_

Tambahkan pengguna baru dengan plugin autentikasi mysql_native_password

Untuk membuat pengguna baru, login ke baris perintah MySQL dan jalankan perintah berikut dengan nama pengguna dan kata sandi

CREATE USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Anda mungkin perlu memberikan hak istimewa kepada pengguna baru. Jika Anda ingin memberikan semua hak istimewa, jalankan kueri berikut

Saya mulai mengerjakan artikel ini setelah saya memecahkan masalah menghubungkan aplikasi ekspres saya ke server MySQL lokal saya. Saya mendapat pesan kesalahan di bawah ini pada upaya pertama saya untuk terhubung ke database MySql lokal

Kesalahan. ER_NOT_SUPPORTED_AUTH_MODE. Klien tidak mendukung protokol autentikasi yang diminta oleh server;

Versi MySQL dari 4. 1x ke atas menggunakan algoritme yang berbeda untuk mem-hash kata sandi dari sebelumnya 4. 1 versi. Jika klien Anda tidak menerapkan algoritme ini, kemungkinan Anda akan mendapatkan kesalahan ini saat mencoba terhubung

Larutan

Ada dua opsi yang tersedia untuk Anda;

  1. Ubah kata sandi pengguna saat ini untuk menggunakan algoritme lama
  2. Buat pengguna baru, atur kata sandi dengan algoritme hashing lama, dan atur hak istimewa

Ubah Kata Sandi Pengguna Saat Ini

Di shell MySQL Anda, ketikkan perintah di bawah ini dengan memasukkan nama pengguna Anda (root atau pengguna saat ini) sebagai pengganti pengguna, dan kata sandi. Jangan hapus tanda kutip

mysql> ALTER USER ‘user’@’localhost’ IDENTIFIED WITH mysql_native_password by ‘password’;

Setelah ini, Anda dapat menggunakan kata sandi baru untuk terhubung

Buat Pengguna Baru

Jika Anda seperti saya dan tidak ingin memiliki dua pengguna dengan hak penuh, ini untuk Anda

Kita mulai dengan membuat user baru di dalam shell MySQL

mysql> CREATE USER ‘newuser'@'localhost' IDENTIFIED BY ‘password';

Sekarang kami memiliki pengguna baru, tetapi pengguna tersebut tidak berguna saat ini karena tidak memiliki izin. Jika Anda keluar dari shell dan mencoba masuk dengan kredensial, Anda akan ditolak

Selanjutnya, kami memberi pengguna beberapa hak istimewa

Untuk hak istimewa penuh

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘newuser’@'localhost';

Tanda bintang masing-masing mewakili database dan tabel yang boleh diakses oleh pengguna. Tinggalkan tanda bintang jika Anda ingin pengguna memiliki akses ke semua database dan tabel

MySQL 8 telah mendukung metode autentikasi pluggable. Secara default, salah satunya bernama caching_sha2_password digunakan daripada mysql_native_password lama kita yang baik (sumber). Sudah jelas bahwa menggunakan algoritma crypto dengan beberapa jabat tangan lebih aman daripada lewat kata sandi biasa yang telah ada selama 24 tahun

Sekarang, masalahnya adalah

npm un mysql && npm i mysql2
_0 di Node (paket yang Anda instal dengan
npm un mysql && npm i mysql2
1 dan menggunakannya dalam kode Node Anda) belum mendukung metode autentikasi default baru MySQL 8 ini. Masalahnya ada di sini. https. //github. com/mysqljs/mysql/issues/1507 dan masih terbuka, setelah 3 tahun, per Juli 2019

UPDATE Juni 2019. Ada PR baru di mysqljs sekarang untuk memperbaikinya

UPDATE Februari 2020. Rupanya itu

UPDATE Juli 2020. Tampaknya masih belum masuk (setidaknya pada April 2020), tetapi node-mysql2 mendukung permintaan sakelar Otentikasi. Beri komentar di bawah jika

npm un mysql && npm i mysql2
_2 berfungsi dengan baik untuk masalah ini -- saya akan mengujinya sendiri nanti

PEMBARUAN April 2021. Sepertinya masalahnya masih ada dan baru 3 hari yang lalu, dan berhasil di sana -- belum resmi di mysql. paket js. Juga, sesuai komentar di bawah, sepertinya paket mysql2 berfungsi dengan baik dan mendukung Authentication-switch dengan benar


Opsi 1) [TIDAK DIREKOMENDASIKAN] Turunkan versi "MySQL" untuk mengautentikasi menggunakan "mysql_native_password" lama yang baik

Itulah yang disarankan semua orang di sini (mis. g. jawaban teratas di atas). Anda baru saja masuk ke mysql dan menjalankan kueri yang mengatakan

npm un mysql && npm i mysql2
4 baik-baik saja menggunakan metode mysql_native_password lama untuk otentikasi

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

Hal baiknya adalah, hidup akan menjadi sederhana dan Anda masih dapat menggunakan alat lama yang bagus seperti Sequel Pro tanpa masalah. Tetapi masalahnya adalah, Anda tidak memanfaatkan barang yang lebih aman (dan keren, baca di bawah) yang tersedia untuk Anda

Opsi 2) [Meh. ] Ganti paket "Node" dengan MySQL Connecter X DevAPI

MySQL X DevAPI for Node adalah pengganti paket Mysqljs Node, yang disediakan oleh http. //dev. mysql. com resmi guys

Ini berfungsi seperti pesona yang mendukung otentikasi caching_sha2_password. (Pastikan Anda menggunakan port

npm un mysql && npm i mysql2
_7 untuk komunikasi Protokol X. )

Hal buruknya adalah, Anda telah meninggalkan paket mysql lama kami yang sudah biasa dan diandalkan semua orang

Hal baiknya adalah, aplikasi Anda sekarang lebih aman dan Anda dapat memanfaatkan banyak hal baru yang tidak disediakan oleh teman lama kita yang baik. Lihat saja tutorial X DevAPI dan Anda akan melihatnya memiliki banyak fitur seksi baru yang berguna. Anda hanya perlu membayar harga kurva pembelajaran, yang diharapkan hadir dengan peningkatan teknologi apa pun. . )

PS. Sayangnya, Paket XDevAPI ini belum memiliki definisi tipe (dapat dimengerti oleh TypeScript), jadi jika Anda menggunakan TypeScript, Anda akan mengalami masalah. Saya mencoba untuk menghasilkan. d. ts menggunakan

npm un mysql && npm i mysql2
9 dan ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'0, tetapi tidak berhasil. Jadi ingatlah itu

Opsi 3) [DISARANKAN] Ganti "mysql. js" dengan "mysql2.js". js" paket

Seperti disebutkan di atas, paket mysql (tautan paket NPM) masih mengalami masalah ini (per April 2021). Tetapi paket mysql2 (tautan paket NPM) tidak. Jadi mungkin yang berikut ini harus menjadi jawaban satu kalimat

npm un mysql && npm i mysql2
_

Harap diperhatikan bahwa mysql2 adalah pekerjaan bercabang dari mysql yang populer, tetapi popularitasnya (620K unduhan per minggu untuk mysql2 pada April 2020) telah mendekati paket aslinya (720K unduhan per minggu untuk mysql pada April 2021) yang beralih

Bagaimana cara memperbaiki metode otentikasi yang diminta server yang tidak diketahui klien?

Untuk memperbaiki masalah ini, Anda perlu mengubah jenis plugin autentikasi MySQL . Untuk ini, Anda harus masuk ke prompt MySQL terlebih dahulu. Kemudian jalankan perintah di bawah ini untuk mengubah jenis plugin autentikasi pengguna;

Bagaimana saya mempertimbangkan untuk memutakhirkan klien MySQL?

Langkah 2. Arahkan ke Perangkat Lunak> Peningkatan MySQL atau ketik "MySQL" di bilah pencarian. Anda juga dapat menemukannya di SQL Services > MySQL/MariaDB Upgrade. Langkah 3. Pilih versi MySQL yang ingin Anda tingkatkan dan klik Berikutnya. Sekarang ikuti langkah-langkah pemutakhiran, dan itu akan mengurus semuanya untuk Anda

Apakah node JS memungkinkan untuk berkomunikasi dengan MySQL?

Setelah Anda memiliki MySQL dan berjalan di komputer Anda, Anda dapat mengaksesnya dengan menggunakan Node. js . Untuk mengakses database MySQL dengan Node. js, Anda memerlukan driver MySQL.

Apa itu kesalahan 1251 di phpmyadmin?

Saat mencoba masuk dari jarak jauh ke server MySQL Anda jika Anda mendapatkan kesalahan ini. KESALAHAN 1251. Klien tidak mendukung protokol otentikasi yang diminta oleh server ; . 1 atau versi yang lebih lama di komputer Anda saat server MySQL Anda berada.