スマートスタイル TECH BLOG

MySQL8.0新機能 (caching_sha2_password 認証プラグイン)

先月、MySQL8.0のGA(Generally Available)版がリリースされました。
今回はMySQL8.0で新規追加された認証プラグイン(caching_sha2_password)について確認したいと思います。

MySQL5.7までの認証プラグインには mysql_native_password がデフォルトで使用されていましたが、MySQL8.0より新たに追加された caching_sha2_password に変更されました。
SHA-256を使用した、より安全なパスワードの暗号化を提供するとともに、キャッシュを使用して同一ユーザの認証処理を高速化しようという、MySQL推奨の認証プラグインです。

caching_sha2_password 認証プラグインの確認

まずは、デフォルトに設定されている認証プラグインを確認します。

ユーザを作成して、作成ユーザに設定されている認証プラグインを確認します。

caching_sha2_password が設定されている事が確認できます。

しかし、認証プラグインに caching_sha2_password を設定しているユーザは、接続に使用するクライアント又はコネクタ側でも caching_sha2_password をサポートしている必要があり、サポートされていない場合は、認証エラーが返されます。

サポートされてる対象は以下のMySQLリファレンスに記載されています。

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors

[抜粋]

・The libmysqlclient client library in MySQL 8.0.4 or higher. Standard MySQL clients such as mysql and mysqladmin are libmysqlclient-based, so they are compatible as well.
・MySQL Connector/C++ 1.1.11 or higher or 8.0.7 or higher.
・MySQL Connector/J 8.0.9 or higher.
・MySQL Connector/Net 8.0.10 or higher (through the classic MySQL protocol).
・MySQL Connector/Node.js 8.0.9 or higher.
・PHP: the X DevAPI PHP extension (mysql_xdevapi) supports it.

試しに、caching_sha2_passwordを設定しているユーザで、mysqlクライアント(ver5.7.21)で接続してみると、以下のように認証プラグインによるエラーが返されました。

同様にPHP(ver7.1.16)のpdoで接続した場合も以下のようなエラーが返されました。

では、 caching_sha2_password がサポートされていないクライアント、コネクタを使用している場合、MySQL8.0を使用できないかといえば、そんな事もありません。

caching_sha2_password がサポートされていないクライアント、コネクタを使用している場合

MySQL5.7までデフォルトとなっていた認証プラグイン mysql_native_password を使用すれば、 caching_sha2_password をサポートしていないクライアント、コネクタからも従来通り接続する事ができます。
mysql_native_password を使用する基本的な方法としては、以下の方法が挙げられます。

・ユーザ作成時に使用する認証プラグインを指定する
ユーザ作成時に「with mysql_native_password」を指定する事で、作成したユーザは mysql_native_password 認証プラグインを使用します。

・デフォルトの認証プラグインを変更する
my.cnfを以下のように設定後にMySQLを再起動します。

※setステートメントでの「default_authentication_plugin」の設定変更はできません。

再起動以降に作成されるユーザは mysql_native_password 認証プラグインを使用します。

mysql_upgradeによるバージョン更新した場合

MySQL5.7からMySQL8.0にmysql_upgradeを使用してバージョンアップした場合、既存ユーザに対しては認証プラグインが mysql_native_password のままとなるようです。

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

上記のMySQLリファレンスに記載されている通り、mysql_upgradeでバージョンアップした際は、既存のユーザに caching_sha2_password を使用させたい場合、ALTERで変更する必要があるので忘れないようにしましょう。

まとめ

mysql_native_password 認証プラグインと比較して、安全なパスワードの暗号化、キャッシュを用いた認証処理のパフォーマンスの向上(今回は検証していませんが。)等のメリットが多いものの、コネクタが対応していない等の理由から mysql_native_password が使用される事も、まだあるかと思います。

しかし、 mysql_native_password の使用は、MySQLのリファレンスにも、改善された認証セキュリティの使用が望ましく、長期的または永続的な解決策ではなく、一時的なものとして使用するよう記載されている為、可能な限り caching_sha2_password を使用しましょう。


MySQL

 

Return Top