2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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に接続できるようになりました。

2
5
0

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
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?