PASSWORD()関数

ログインするときにユーザとパスワードを入力する。
そういったログイン画面はどこにでもあると思う。
今回そういったログイン画面を作った。
何も問題なく出来、実際にログイン自体も出来た。


しかし、サーバにあげて動かしてみたらパスワードが不正といわれなぜかログイン出来なかった。。。。
ローカルでログイン出来たのにサーバにあげたとたんログイン出来ないとは何故に?


と、不思議に思っていたところ前日のバージョン違いによるエラー事件のことを思い出した。


ユーザのパスワードはPASSWORD関数を使ってDBに登録している。
ログイン処理では入力されたパスワードをPASSWORD関数使って変換しDBの値と比較している。
このPASSWORD関数が問題だった。


PASSWORD関数は4.1より前だと16バイト長ハッシュ値を返してくるのに対し、
4.1以降では41バイト長ハッシュ値を返すそうだ。
当然それぞれのバージョンでは違った値を返す。


ユーザの情報をサーバで作れば問題はなかったのだろうが、
データを作るのが面倒だったのでローカルで使っていたものをそのまま使っていた。
それが理由でパスワードがマッチしなかったのだ。


ローカルに開発環境を作る際はサーバと同じにしておかないとこういったことがよく起こるのだと改めて痛感した。