passテーブル内の列がAUTH41 文字以上であること、または次の値から返される値であることを確認します。
SELECT LENGTH(PASSWORD('foo'))
LENGTH(PASSWORD('foo'))
-------------------------
41
このテスト ケースはpass、テーブル内の列authbadがパスワード文字列全体を保持するのに十分な大きさでない場合に何が起こるかを示しています。
CREATE TABLE auth (id VARCHAR(32), pass VARCHAR(41)); // pass column matches length
INSERT INTO auth VALUES ('abc',PASSWORD('abc'));
CREATE TABLE authbad (id VARCHAR(32), pass VARCHAR(32)); // pass column too short
INSERT INTO authbad VALUES ('abc',PASSWORD('abc'));
SELECT COUNT(1) FROM auth WHERE pass=PASSWORD('abc');
COUNT(1)
----------
1
SELECT COUNT(1) FROM authbad WHERE pass=PASSWORD('abc');
COUNT(1)
----------
0
もう 1 つの (可能性は低いですが) 問題は、INSERT または SELECT のいずれかで文字セット変換が行われていることですが、他方では発生していません。パスワードがアスタリスクと16進数(大文字)を返すことを考えると、それがどのように問題になるかはわかりません。