はじめに
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のリプレイス後に再度認証方法の修正を実施する流れとなります。
データベースの整合性を保つためにはシステムに関わる影響度に合わせて臨機応変に対応することが重要ですね。