はじめに

MSPチームのまっちゃんです。

RDS for MySQL 5.7から8.0へのアップグレードの際に、ユーザー認証方法に関するエラーが発生することがあります。
MySQL 8.0では、mysql_native_password 認証方法が非推奨となり、caching_sha2_password 認証方法の使用が推奨されるようになりました。
本記事では、ユーザー認証方法の非推奨によるエラーが発生する原因と解決策について解説します。

原因

認証プラグインが「mysql_native_password」から「caching_sha2_password」へ強化されました。
バージョン8.0.34以降より非推奨となり、8.0.33ではエラーを解消せずにアップグレードができますが、8.0.33以降ではエラーを解消しないとアップグレードができません。
また、PHPを使用している場合、 バージョン7.4.4系以上でないと「caching_sha2_password」に変更してもアプリケーション側との整合性が取れない可能性があります。
OSやPHPが対応していない場合はEC2のリプレイスなどを先に対応することも検討してください。
PHP 公式マニュアル

エラー文
Consider switching the users to a different authentication method (i.e. caching_sha2_password).
The 'mysql_native_password' authentication type is disabled by default in MySQL 8.4, but can still be enabled by setting loose_mysql_native_password=ON.
[該当のユーザー名]@% - The following users are using the 'mysql_native_password' authentication method which is deprecated as of MySQL 8.0.34 and will be removed in a future release.

上記の場合、該当のユーザーはmysql_native_passwordの認証方法を使用しているため、caching_sha2_passwordなどの認証方法に切り替えることを検討する必要があります。
mysql_native_passwordをそのまま使用する際は、loose_mysql_native_password=ON を設定することで有効にすることができます。

解決策

パターン1.「mysql_native_password」を継続して使用する(一時的な対処方法)
パターン2.「caching_sha2_password 」へ認証方法を変更する

解決方法

「 mysql_native_password」を継続して使用する(一時的な対処方法)

  • 対象のサーバに入り、MySQLの設定ファイル(/etc/my.cnf)を開きます。
vi /etc/my.cnf
  • 設定ファイルの[mysqld]に下記の内容を追記します。
loose_mysql_native_password=ON

設定内容について以下のような違いがあるため、設定ファイルの書き換え時には注意が必要です。

設定 説明 対象MySQL バージョン
mysql_native_password=ON mysql_native_password 認証方式を明示的に有効にする (MySQL 8.0.34 より前のバージョン) 8.0.34 以前
loose_mysql_native_password 非推奨の mysql_native_password 認証方式を一時的に有効にする (MySQL 8.0.34 以降のバージョン) 8.0.34 以降

「caching_sha2_password 」へ認証方式を変更する

  • ユーザごとに以下のコマンドを実施します。
ALTER USER user
  IDENTIFIED WITH caching_sha2_password BY 'password';

優先認証プラグインとしての caching_sha2_password
6.4.1.2 SHA-2 プラガブル認証のキャッシュ
6.4.1.3 SHA-256 プラガブル認証

まとめ

今回、OSやPHPのバージョンがcaching_sha2_passwordに対応していなかったため、一時的にmysql_native_passwordを継続して使用することにしました。
EC2のリプレイス後に再度認証方法の修正を実施する流れとなります。
データベースの整合性を保つためにはシステムに関わる影響度に合わせて臨機応変に対応することが重要ですね。