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」で弾かれる。
第一選択はクライアント / ドライバの更新。
更新が難しい場合だけ、ユーザー単位で従来の認証方式に切り替える。
よくある原因
- サーバ側が MySQL 8 で、既定が
caching_sha2_password。 - クライアントやドライバが古く、
caching_sha2_passwordに未対応。 - アプリのライブラリが
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 でも安全に鍵交換できる。