我在服务器中有这个选择查询:
password ="%{sql:SELECT password FROM list WHERE Account =' their_username' AND%{sql:SELECT status FROM member WHERE login =' their_username'"
表格中有多个密码" list"为每个用户。现在,只有当该语句开头的密码变量与" list"中的第一个密码匹配时,这才有效。
但我希望查询能够查看其他密码,并且如果任何密码与语句开头的密码变量匹配,则可以使用该密码。
答案 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,它将返回两个密码! 您是否可以发布列表表格以获得更多理解!