不希望选择查询在第一场比赛时停止

时间:2014-12-14 18:03:21

标签: mysql sql sql-server select

我在服务器中有这个选择查询:

  

password ="%{sql:SELECT password FROM list WHERE Account =' their_username' AND%{sql:SELECT status FROM member WHERE login =' their_username'"

表格中有多个密码" list"为每个用户。现在,只有当该语句开头的密码变量与" list"中的第一个密码匹配时,这才有效。

但我希望查询能够查看其他密码,并且如果任何密码与语句开头的密码变量匹配,则可以使用该密码。

3 个答案:

答案 0 :(得分:1)

第一个问题:您想从数据库中提取的最终变量是什么?是用户的状态吗?

第二个问题:您是在尝试操纵用户的密码集,还是只是想确定给定的密码是否与用户关联的任何一个密码匹配(而不是第一个)? / p>

再次查看您的查询并问自己:我正在测试的第二列的名称是什么?

我在您的查询中看到的是

SELECT password FROM list 
    WHERE Account = 'their_username' 
        AND (something missing) = 
            SELECT status FROM member WHERE login = 'their_username'

实际上,我认为您的表格应该设置为使您的查询看起来更像

SELECT password FROM list,member 
    WHERE member.login = 'loginName' AND list.MemberID = member.ID

使用此SQL fiddle,并查看relational algebra

上的一些资料

答案 1 :(得分:1)

我无法相信我正在帮助解决这个明显而严重的安全问题,但你应该在两个表格上加入:

SELECT l.password 
FROM member m
INNER JOIN list l ON l.login = m.Account
WHERE m.Account = 'their_username' and l.password='the_password'

然后你应该回去学习如何正确处理密码:盐和散列密码是什么意思。更好的是:永远不要编写自己的身份验证代码。相反,尽可能地依靠您选择的平台提供给您的身份验证功能,因为编写似乎有效的身份验证代码非常容易,通过全面的单元测试,并且仍然存在缺陷,应用程序很难破解。

答案 2 :(得分:0)

这应该返回所有密码!可能是您的表中只有一个用户名状态组合。

username   status    password
abc123     online    pppp
abc123     online    qqqq
def456     online    rrrr
def456     offline   ssss

如果用户名为abc123,则只返回一个密码,但对于def456,它将返回两个密码! 您是否可以发布列表表格以获得更多理解!