我正在使用PASSWORD()来哈希我的密码。我知道这不是一个首选的方法,可能不是很安全,但我仍然在一些几乎不需要任何安全性的应用程序中使用它。所以,我的插入语句如下:
INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass'));
我确认myPass现在已经哈希了。
现在我正在尝试获取密码设置为myPass的行数。我尝试使用以下查询,但我继续得到0计数:
SELECT COUNT(*) FROM AUTH where pass=PASSWORD('myPass');
有什么建议吗?
答案 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上发生了字符集转换,而另一个则没有发生。鉴于密码返回星号和十六进制数字(大写),我真的不明白这应该是一个问题。