PHP サーバーを PHP 5.3.3 から PHP 5.6.x にアップグレードした後、プレーンな CentOS 6.x 64 ビット ボックスで MySQL サーバー 5.1.x を使用すると、いくつかの新しいウェブ アプリケーションで次の mysqlnd 接続エラーが表示されました。古い安全でない認証を使用して MySQL 4.1+ に接続します
これは完全で正確なエラーです:
mysqlnd は、古い安全でない認証を使用して MySQL 4.1+ に接続できません。 管理ツールを使用して、コマンド SET PASSWORD =PASSWORD('your_existing_password') でパスワードをリセットしてください。これにより、新しい、より安全なハッシュ値が mysql.user に保存されます。このユーザーが PHP 5.2 以前で実行される他のスクリプトで使用されている場合は、my.cnf ファイルから old-passwords フラグを削除する必要がある場合があります
これは、新しい mysqlnd php クライアントが、MySQL の古いスタイルのパスワードを使用することを拒否するために発生します。そのため、old_passwords=1 を使用していても、より強力なパスワード ハッシュ セキュリティを必要とするこの新しい Web アプリでは機能しません。
古い安全でない認証を使用して mysqlnd が MySQL 4.1+ に接続できないというエラーを修正するにはどうすればよいですか?
このエラーは、次の手順に従うと簡単に修正できます:
メインの MYSQL 構成ファイルを編集します:
nano -w /etc/my.cnf
変更:
old_passwords=1
へ
old_passwords=0
変更を適用します:
service mysqld restart
root として MySQL コンソールに接続します:
mysql -u root -p
ユーザーパスワードをリセットして、新しいハッシュを使用します:
SET PASSWORD FOR 'mysqluser'@'localhost'=PASSWORD('passwordhere'); flush privileges;
「mysqluser」と「passwordhere」を実際のユーザー名とパスワードに置き換えてください。
/etc/my.cnf に戻り、以前に行った変更を元に戻し、次のように設定します。
old_password=1
MySQL を再起動して変更を適用します:
service mysqld restart
これで、ユーザーはより強力な MySQL パスワード ハッシュを使用するはずです。
これは、次のコマンドを使用して MySQL コンソールから確認できます:
mysql> SELECT user, Length(Password) FROM mysql.user; +------------------+------------------+ | user | Length(Password) | +------------------+------------------+ | root | 16 | | forum_user | 16 | | user2 | 41 | | lorex | 41 | | m3user | 16 |
「41」が表示されている場合、そのユーザーは新しいハッシュを使用しており、「16」は古いハッシュを使用していることを意味します。
これで、エラー mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication が修正され、Web アプリケーションを正常に操作できるようになります。
修正方法:古い安全でない認証を使用して mysqlnd が MySQL 4.1+ に接続できない