できない.dev

MySQL で「Client does not support authentication protocol」が解決できない

MySQL 8 は既定の認証が caching_sha2_password になり、古いクライアントやドライバが未対応だと接続できない。
第一選択はクライアント / ドライバの更新、難しければユーザー単位で認証方式を切り替える。

公開:

要約

MySQL 8.0 は既定のパスワード認証プラグインが caching_sha2_password に変わった。

古い MySQL クライアントや一部の言語ドライバがこの方式に未対応だと、「Client does not support authentication protocol requested by server; consider upgrading MySQL client」で弾かれる。

第一選択はクライアント / ドライバの更新。
更新が難しい場合だけ、ユーザー単位で従来の認証方式に切り替える。

よくある原因

  1. サーバ側が MySQL 8 で、既定が caching_sha2_password
  2. クライアントやドライバが古く、caching_sha2_password に未対応。
  3. アプリのライブラリが mysql_native_password 前提で組まれている。

解決策

1. クライアント / ドライバを更新する(推奨)

Node なら mysql2、Python なら新しい PyMySQL / mysqlclient を使うと caching_sha2_password に対応する。
まずライブラリのバージョンを上げるのが恒久策。

2. ユーザーの認証方式を変更する

更新できない場合、そのユーザーだけ従来方式にする。

ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
FLUSH PRIVILEGES;

ただし mysql_native_password は MySQL 8.4 で既定無効・将来削除予定のため、あくまで暫定策とする。
プラグインの詳細は MySQL 公式の caching_sha2_password 解説(新しいタブで開く) を参照。

3. 新規構築なら作成時に指定する

CREATE USER 'app'@'%' IDENTIFIED WITH caching_sha2_password BY 'yourpassword';

接続を TLS にすれば caching_sha2_password でも安全に鍵交換できる。

この記事は役立ちましたか?