0

PASSWORD() を使用してパスワードをハッシュしています。これは推奨される方法ではなく、あまり安全ではない可能性があることは理解していますが、セキュリティをほとんど必要としないアプリケーションにはまだ使用しています。したがって、挿入ステートメントは次のようになります。

INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass'));

myPass が現在ハッシュされていることを確認しました。

今、パスワードが myPass に設定されている行の数を取得しようとしています。次のクエリを使用してみましたが、カウントが 0 のままです。

SELECT COUNT(*) FROM AUTH where pass=PASSWORD('myPass');

おすすめはありますか?

4

1 に答える 1

0

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進数(大文字)を返すことを考えると、それがどのように問題になるかはわかりません。

于 2013-07-18T22:42:19.013 に答える