无法在MYSQL中检索已使用Password()的行

时间:2013-07-18 22:30:52

标签: mysql

我正在使用PASSWORD()来哈希我的密码。我知道这不是一个首选的方法,可能不是很安全,但我仍然在一些几乎不需要任何安全性的应用程序中使用它。所以,我的插入语句如下:

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

我确认myPass现在已经哈希了。

现在我正在尝试获取密码设置为myPass的行数。我尝试使用以下查询,但我继续得到0计数:

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

验证pass表中的AUTH列是否至少包含41个字符,或者返回的值是什么:

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

另一个(不太可能)的问题是在INSERT或SELECT上发生了字符集转换,而另一个则没有发生。鉴于密码返回星号和十六进制数字(大写),我真的不明白这应该是一个问题。