検索

ホームページ  >  に質問  >  本文

MySQL クライアントをアップグレードしてください: MySQL 8.0 - クライアントはサーバーによって要求された認証プロトコルをサポートしていません

何らかの理由で、サーバーへの単純な接続を確立できません。デフォルト設定を使用して、最新の MySQL Community 8.0 データベースを Node.JS とともにインストールしました。

これは私のnode.jsコードです

リーリー

コマンド プロンプトで見つかったエラーは次のとおりです:

リーリー

次のようなものを読みました。 https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507

しかし、問題を解決する方法がまだわかりません。

P粉574695215P粉574695215469日前819

全員に返信(2)返信します

  • P粉161939752

    P粉1619397522023-10-11 09:08:13

    ###まとめ###

    プロジェクトのセキュリティ リスク
      を犠牲にしてバグを排除したいだけの場合は、
    1. @Pras の回答 -- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' 次に、権限を更新します これを修正したいが理由がわからない場合は、mysql2
    2. (
    3. mysql の代わりに) をインストールして使用してください - npm mysql2および mysql = require('mysql2'); あなたが好奇心旺盛で常に学びたがっている開発者であれば、読み続けてください... :)
    4. ###どうしたの?
    まずは何が起こったのかを解明する必要があります。

    MySQL 8 は、プラグ可能な認証方法をサポートしています。デフォルトでは、古い

    mysql_native_password

    (

    source

    ) の代わりに、caching_sha2_password という名前のパスワードの 1 つが使用されます。どうやら、複数のハンドシェイクを使用する暗号化アルゴリズムは、##24 で使用される単純なパスワードの受け渡しよりも安全であるようです。年###! ここで、問題は、Node の mysqljs (npm i mysql を使用してインストールし、Node コードで使用するパッケージ) が、MySQL 8 のこの新しいデフォルト認証をサポートしていないことです。メソッドはまだ利用できません。この問題はここにあります:

    https://github.com/mysqljs/mysql/issues/1507

    2019 年 7 月現在、3 年経った今でもオープンしています。 2019 年 6 月更新: これを修正するための新しい PR が mysqljs にあります。

    2020 年 2 月更新: どうやら、mysqljs バージョン 3 で提供される予定のようです。

    2020 年 7 月の更新: どうやらまだ (少なくとも 2020 年 4 月の時点では) にはないようですが、

    node-mysql2 と主張しています。 認証切り替えリクエストをサポートします。 node-mysql2< a href="https://github.com/sidorares/node-mysql2" rel="noreferrer"> がこの問題を適切に解決する場合は、以下にコメントを残してください。 - 後ほど自分でテストします。 2021 年 4 月の更新: 問題はまだ存在しているようですが、わずか 3 日前に 誰かがフォークを作成して実装しました - ただし、mysql.js パッケージ内ではまだ公式ではありません。また、以下のコメントによると、mysql2 パッケージ は正常に動作し、

    認証切り替えを適切にサポートしているようです。


    あなたの現在のオプション

    オプション 1) [非推奨] 認証に古い「mysql_native_password」を使用するように「MySQL」をダウングレードする

    これは、ここにいる誰もが提案していることです (上記の ベストアンサー のように)。 mysql にアクセスし、古い mysql_native_password メソッドを使用して root を認証できることを示すクエリを実行するだけです。 リーリー

    良いニュースは、生活がより簡単になり、

    何も質問することなく、Sequel Pro のような古き良きツールを引き続き使用できることです。しかし問題は、より安全なものを利用していないことです(そしてクールです、下記をお読みください)。 オプション 2) [まあ...] 「ノード」パッケージを MySQL Connecter X DevAPI に置き換えます

    MySQL

    これは、caching_sha2_password 認証をサポートする魅力のように機能します。 (#XX プロトコル通信 には必ずポート 33060 を使用してください。)

    悪いのは、私たち全員が慣れ親しんで依存していた古い mysql パッケージからあなたが離れてしまったことです。 利点は、アプリケーションの安全性が向上し、私たちの古き良き友人が提供していない大量の新機能を利用できることです。 XX DevAPI チュートリアル をチェックしてみると、便利な新しいセクシーな機能がたくさんあることがわかります。テクノロジーのアップグレードには必ず伴う学習曲線の代償を支払う必要があるだけです。 :)

    PS.残念ながら、この XDevAPI パッケージには (TypeScript が理解できる) 型定義がまだないため、

    typescript を使用すると問題が発生します。 dts-gen と dtsmake を使用して .d.ts を生成しようとしましたが、成功しませんでした。したがって、このことを念頭に置いてください。

    オプション 3) [推奨] 「mysql.js」を「mysql2.js」パッケージに置き換えます

    前述したように、mysql パッケージ (NPM パッケージのリンク

    ) には まだこの問題が存在します (2021 年 4 月の時点)。しかし、mysql2 パッケージ (

    NPM パッケージのリンク

    ) はそうではありません。したがって、おそらく次のことが簡単な答えになるはずです。

    リーリー

    mysql2 は人気のある mysql のフォークですが、その人気 (mysql2 は 2020 年 4 月時点で週あたり 620,000 ダウンロードでした) であることに注意してください。元のパッケージ (2021 年 4 月の週あたり 72 万ダウンロード mysql

    ) に近いため、切り替えるのが合理的だと思われます。

    返事
    0
  • P粉198749929

    P粉1987499292023-10-11 00:55:10

    MYSQL Workbench で次のクエリを実行します

    ユーザー 'root'@'localhost' を mysql_native_password BY 'password' で識別されるように変更します;

    ここで root はユーザーです localhost を URL として使用します password をパスワードとして使用します

    次に、次のクエリを実行して権限を更新します:

    権限を更新;

    これを実行した後、ノードを使用して接続してみます。

    これが機能しない場合は、@'localhost' 部分を使用しないようにしてください。

    返事
    0
  • キャンセル返事