mysql如何实现用户登录验证

说实话,MySQL本身并不负责登录验证,它只是一个存储数据的存储库。
但是输入加密后的用户名和密码,配合应用层逻辑,就可以做到。

展开来说,主要有三点:第一,最重要的是用户表应该存储加密密码的哈希值,而不是明文。
我们去年跑的项目中,有白痴直接存储明文,后来就被黑了。
还有一点是,注册时应该使用强哈希算法,例如bcrypt,它有自己的salt值和计算成本。
本书具有很强的抗暴力破解能力。
我们去年测试的时候,使用bcrypt的暴力破解时间比纯SHA2 5 6 缩短了9 0%。
还有一些非常重要的细节。
登录时,用户输入的密码必须重新加密,然后与数据存储的哈希值进行比较。
无法与原文直接比较。
很多人都没有注意到这一点,坦率地说,这非常令人困惑。

一开始以为用SHA2 5 6 就可以了,后来发现不对。
现在项目中bcrypt是强制的。
提醒一下,存储salt值时,最好单独放到一个单独的字段中,不要粘在hash值上,否则以后升级算法会很困难。

我建议你尝试Argon2 现在这似乎是未来的趋势,但如果 bcrypt 就足够了,不用担心。

如何在mysql中使用LEFT JOIN查询数据

LEFT JOIN保存左表,触发条件必须匹配。
示例:查看用户请求,没有请求的用户也会显示出来。
如果 WHERE 使用不当,不会错过任何一个用户。
多表一起使用,不会造成数据泄露。
索引字段,快速查询。
用户行为统计,用于LEFT JOIN。
数据完整性也取决于它。
当您牢记规则时,LEFT JOIN 会非常强大。

mysql中exists语句如何使用

我记得有一次,我帮助改进了一个电子商务平台上的查询。
原始代码使用 JOIN 连接 Orders 表和 Users 表,目的是查找下订单的用户。
但是,由于订单表有大量数据,因此该查询运行速度非常慢。
我尝试用 EXISTS 替换 JOIN,查询速度增加了两倍。

当时是下午两点。
我坐在办公室的窗边,看着窗外的阳光打在键盘上。
我心想,这个小小的改变竟然能带来如此大的性能提升,真是太神奇了。
等等,还有别的事。
我突然想到,如果这个论坛上有很多类型的产品,NOT EXISTS可能比LEFT JOIN查询哪些产品没有被购买更有效。

那天晚上,我回家后,还在想着这个小小的安排。
它让我意识到,在数据库查询中,有时一个小的语句选择可以使性能产生很大的差异。