LoginSignup
5

More than 5 years have passed since last update.

PHPからMYSQLにつながらない。OLD_PASSWORDが原因だった。

Last updated at Posted at 2016-07-05

現象

古いシステムをベースに機能追加していると、WebサーバからMySQLに接続できない問題にぶつかりました。

【環境】
接続元: PHP 5.3 新規
接続先: MySQL 5.0.96 運用中

調査

調べてみるとこんな記事が。
http://www.ninton.co.jp/?p=1198

この記事によると、MySQLユーザーが古い16バイトのパスワードフォーマットであることが原因みたい。
PHP5.3から、mysqlドライバ部分がmysqlndライブラリに変更されて、41バイトのパスワードフォーマットを使用しないといけないとな。
対応としては、
1.my.cnfのold_passwords=0に変更してMySQL再起動。そしてユーザーのパスワードを設定する。
2.別のMySQLサーバをたててmy.cnfのold_passwords=0にして、そこでパスワード生成。それを本番のユーザーパスワードにコピー。

うーん、どっちも障壁が高いなあ。
my.cnfの設定を変えないままパスワード設定できないものだろうか?

できた

そうだ、今限りで設定を一時的に変更しよう。

SET @@session.old_passwords = 0;

OLD_PASSWORD関数でパスワード生成してみます。

SET PASSWORD FOR 'testuser'@'localhost' = OLD_PASSWORD('mypass');

セットしたら下記SQLで結果確認。

SELECT * FROM `mysql`.`user`;

→6f8c114b58f2ce9e

これがダメな16バイトハッシュのパスワードです。
では、本題の41バイトハッシュで。PASSWORD関数を使います。

SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD('mypass');

→*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4

41バイトハッシュでパスワードを生成できました。
PHPからMySQLに接続できるようになりました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5