PHP-5.6 に更新したらMySQL DBに接続できなくなった

July 6, 2015 – 1:32 pm

前回エントリーでPHP-5.6.10にアップグレードしたことを書いた。困ったことに、これが災いしてMySQL DBへの接続ができなくなってしまい、このブログの公開にも支障をきたしてしまった。
障害の発生は、PHP-5.4以降登場したMySQL向けのクライアントライブラリphp-mysqlndが導入・使用されたことによる。
対応するためにとった措置についてメモしておく。

障害の内容
前回Les RPM de Remi 提供のyum Repository追加とそれによる php-5.6.10のRPMアップデートにおいては、冒頭に書いたように、MySQLへの接続を行うクライアントライブラリがphp-5.3以前のphp-mysqlに代わりphp-mysqlndとなった。今回現れた障害は、この変更による「副作用」のようだ(表面的な理解のみ)。

Database connection fialed: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’).
This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file.

このメッセージの示すところは、MySQLのいmysql userのパスワードに対応するhash値として採用されるものが mysqlndでは従来の14ビット長から41ビット長になり、認証方法がよりセキュアなものに変更されているということのだ。

hash値は最初にパスワードの(再)設定に際してセットされるので、[SET PASSWORD]コマンドを使って再設定してやればよい、ということのようだ。

対応措置: 
Mysql コマンド実行時のログを以下に示す。

mysql> UPDATE mysql.user SET Password = PASSWORD("your_password") WHERE User = "user_name" limit 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT LENGTH(Password) FROM mysql.user WHERE User = "user_name";
+------------------+
| LENGTH(Password) |
+------------------+
|               41 |
+------------------+
1 row in set (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)


Post a Comment