1

我不确定正确的技术措辞,所以请原谅我的标题,但这就是问题所在。我有一个 MySQL 数据库,在用户表中我有 *user_name*、一个 *password_salt* 和一个包含密码和 salt的 md5密码。在一个程序中,用户连接,我收到一个要发送的查询以验证用户。当用户连接时,我需要一种方法来选择他们的用户名,并将给定的密码与存储的密码进行比较,这需要在 WHERE 语句的某处检索盐(我猜)。

这是我假设的“例子”:

SELECT user_name 
FROM users 
WHERE user_name='$nick' AND 
      password = md5(CONCAT('$md5pass', md5((select password_salt FROM users where user_name='$nick')))) 
LIMIT 1

分辨率更新:得到它的工作,感谢您的建议,一个正常的选择就足够了,问题是 sql-auth api 没有收到密码,除非指定了端口。

4

3 回答 3

1

实际上,您不仅可以在“SELECT”子句中,还可以在“WHERE”子句中自由使用“FROM”子句中声明的表中的任何列,所以我认为这里不需要子查询。简单地说:

SELECT user_name 
FROM users 
WHERE user_name='$nick' AND 
      password = md5(CONCAT('$md5pass', md5(password_salt))) 
LIMIT 1

这样,只有当它同时匹配时才会选择一行: - 用户名是正确的 - 行中的密码与给定的密码匹配

我不确定我是否正确使用了 md5() 函数。我复制了你的例子。

于 2012-07-22T20:15:11.270 回答
0

SELECT user_name FROM users WHERE user_name='$nick' AND password = md5(CONCAT('$md5pass', password_salt)) LIMIT 1

于 2012-07-22T20:15:00.223 回答
0

试试这个:

SELECT user_name 
FROM users 
WHERE user_name='$nick' AND 
      password = md5(CONCAT('$md5pass', md5(password_salt))) 
LIMIT 1
于 2012-07-22T20:15:48.147 回答