TL;DR: クイック修正接続エラーでお困りですか?アプリケーションをすぐにオンラインに戻す必要がある場合は、MySQLターミナルで次のSQLコマンドを実行して、プロトコルの不一致を回避してください。
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
your_usernameとyour_passwordを実際の認証情報に置き換えてください。このコマンドは、ユーザーの認証方式を、ほぼすべてのクライアントがサポートしているレガシーな形式に戻します。
原因についてMySQL 8.0で仕様が変更されました。セキュリティとパフォーマンスを強化するため、デフォルトの認証方式がmysql_native_passwordからcaching_sha2_passwordに切り替わりました。これは優れた標準ですが、古いドライバはこの新しい方式を解釈できません。
ER_NOT_SUPPORTED_AUTH_MODEエラーは、レガシーなNode.jsのmysqlパッケージ(v2.18.1以下)や、7.2.4より古いPHPバージョンなどのクライアントが接続しようとしたときに発生します。クライアントは従来のハンドシェイクを期待していますが、サーバーはクライアントが処理できないSHA256ベースのチャレンジを送信します。その結果、接続が切断されます。
解決策1:特定のユーザーを対象にする最も的確な解決策は、アプリケーションが使用する特定のアカウントのみプラグインを変更することです。これにより、サーバー全体のセキュリティを低下させることを避けられます。また、再起動も不要です。
- MySQLシェルにアクセスします:
mysql -u root -p- ユーザーを更新します。ユーザーが任意のホスト('%')から接続する'web_app'の場合:ALTER USER 'web_app'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!';- 変更を適用します:``` FLUSH PRIVILEGES;
### 認証情報のセキュリティに関する注意レガシー認証は新しいSHA2のデフォルトよりも堅牢性に欠けるため、パスワードの強度がこれまで以上に重要になります。単純な文字列は避け、[ToolCraftパスワード生成器](https://toolcraft.app/en/tools/security/password-generator)のようなツールを使用して、エントロピーの高いキーを作成してください。ブラウザ内でローカルに安全な文字列を生成するため、作成プロセス中に認証情報がネットワークに流れることはありません。
## 解決策2:グローバルなデフォルト値を変更する多数のユーザーを管理していますか?今後作成されるすべての**新規**ユーザーに対して、MySQLにレガシーなプラグインの使用を強制できます。ただし、既存のユーザーが自動的に修正されるわけではないため、それらについては手動で`ALTER`を実行する必要があることに注意してください。
- 設定ファイル(Linux/macOSの場合は`my.cnf`、Windowsの場合は`my.ini`)を開きます。- `[mysqld]`セクションの下に、以下の行を追加します。```
[mysqld]
default_authentication_plugin=mysql_native_password
```- サービスを再起動して適用します:```
# Ubuntu/Debian
sudo systemctl restart mysql
# macOS (Homebrew)
brew services restart mysql
確認ユーザーテーブルをクエリして、作業結果を確認します。各アカウントがどのプラグインを使用しているかが正確に表示されます。
SELECT user, host, plugin FROM mysql.user;
結果の中でmysql_native_passwordを探してください。依然としてcaching_sha2_passwordが表示される場合は、ALTER USERコマンドで指定したhostが正確に一致しているか(例:'root'@'localhost'と'root'@'%'は異なります)を再確認してください。

