【问题标题】:SQL Select Statement, 2 tables [duplicate]SQL Select 语句,2 个表 [重复]
【发布时间】:2013-12-21 08:20:56
【问题描述】:

我有两张桌子: Userlogindetails(用户名,通过) 用户详细信息(电子邮件、用户名*)

-加粗的是PK,星号是FK

我正在尝试使用 sql 语句创建忘记密码的 PHP 页面。 用户将输入他们的电子邮件地址,sql 语句将在 Userdetails 中检查电子邮件是否正确。 然后 Userdetails 中的用户名将与 Userlogindetails 匹配以找到密码。 我需要两个陈述吗?

谢谢

【问题讨论】:

  • 首先需要去掉“匹配Userlogindetails找到密码的`”。切勿存储密码,除非您正在构建密码库。
  • 如果用户和他们的登录名之间存在一对一的关系(似乎是因为这里没有其他字段),为什么不简单地有一个表?
  • @GolezTrol 存储密码是典型的做法。但是,如果您的意思是永远不应该存储明文/未加密的密码,我会同意您的看法。密码应始终经过某种形式的散列/加密进行存储。
  • @MikeBrant 散列,不加密。两者有很大的不同。加密意味着您可以解密它。除了尝试找到匹配的a(不一定是your)密码外,没有去散列这样的事情。您不应该存储密码,无论是否加密。只需存储一个哈希,让用户在忘记密码时设置一个新密码。
  • 是的,Adobe 最近被烧毁了,因为他们使用加密而不是散列 slashdot.org/story/13/11/05/1655225/…

标签: php sql select


【解决方案1】:

不(您不需要 2 个语句),您可以使用 SQL JOIN 来完成此操作,例如

SELECT b.pass FROM 
userdetails a
LEFT JOIN 
userlogindetails b 
ON a.username = b.username
WHERE a.email = <put user input here, use a parameterized query>

SQL 联接:

http://www.w3schools.com/sql/sql_join.asp

正如其他人所指出的,您不应该在数据库中存储密码。根据您的特定安全需求,您需要确定这是否是一个好主意。这里讨论了用于存储的密码 + 盐哈希技术:

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 2020-04-18
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多