无法检索MYSQL中已使用Password()的行
我正在使用PASSWORD()散列我的密码。我知道这不是一种首选方法,也可能不太安全,但我仍在将其用于一些几乎不需要任何安全性的应用程序。因此,我的insert语句如下所示:无法检索MYSQL中已使用Password()的行,mysql,Mysql,我正在使用PASSWORD()散列我的密码。我知道这不是一种首选方法,也可能不太安全,但我仍在将其用于一些几乎不需要任何安全性的应用程序。因此,我的insert语句如下所示: INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass')); 我已验证myPass现在已哈希化 现在,我正在尝试获取密码设置为myPass的行数。我已尝试使用以下查询,但继续得到0计数: SELECT COUNT(*) FROM AUTH whe
INSERT into AUTH(id,pass) VALUES ('myUserName', PASSWORD('myPass'));
我已验证myPass现在已哈希化
现在,我正在尝试获取密码设置为myPass的行数。我已尝试使用以下查询,但继续得到0计数:
SELECT COUNT(*) FROM AUTH where pass=PASSWORD('myPass');
有什么建议吗?请验证
AUTH
表中的pass
列是否至少包含41个字符,或者是否返回了以下值:
SELECT LENGTH(PASSWORD('foo'))
LENGTH(PASSWORD('foo'))
-------------------------
41
此测试用例演示了当authbad
表中的pass
列不够大,无法容纳整个密码字符串时发生的情况:
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
另一个(不太可能的)问题是,字符集转换正在插入或选择上进行,而在另一个插入或选择中没有发生。考虑到密码返回的是星号和十六进制数字(大写),我并不认为这是一个问题。我无法用这些精确的查询重现这个问题。所以:要么变量不完全相同(注意空格),要么插入失败(可能是双id?)。mysql文档建议不要对应用程序使用密码。我已经验证了插入是否有效。当你说你不能重现问题时,这是否意味着你得到了正确的计数?i、 e.非零count@Newcoder您验证了整个密码字符串是否被存储,并且没有被截断?注意,如文件所示:“该函数由MySQL服务器中的身份验证系统使用;您不应该在自己的应用程序中使用它。为此,考虑或替代。”验证上述解决方案是否有效。pass由32个字符定义。改为41,现在可以用了。非常感谢您的帮助。如果您发现我的答案解决了您的问题,您可以“接受”答案。有些人不愿意回答不接受答案的成员提出的新问题。