我在 MySQL 数据库上创建了一个表的 View ,以使另一个应用程序能够使用我们现有的(集中式)客户表。
我们的密码存储为
md5(密码+盐)+“:”+盐
通常我通过我们正在连接的给定应用程序的编程语言对此进行解码,但是......
这次是第三方应用程序,我只有 SQL 和一个查询来授权用户。
你能帮我创建一个有效的 SQL 查询来进行身份验证吗?
逻辑很简单:
- 为给定用户获取盐,(冒号后的所有内容)
- 结合密码和盐
- MD5密码和salt
- 然后比较结果的md5 hash
此应用程序的默认 sql 查询是
从用户中选择* 其中用户名=?和用户密码=?
提前致谢。
最佳答案
我试过了,效果很好:
SELECT * FROM users
WHERE userPass = CONCAT(
MD5(CONCAT('xyzzy', (@salt := SUBSTRING_INDEX(userPass, ':', -1)))),
':', @salt)
AND userName = 'bkarwin';
我知道您可能没有更改任何内容的自由,但就 FWIW 而言,MD5()
被认为对密码的加密强度不够高。建议使用 SHA-256,可通过 MySQL 6.0.5 中的 SHA2()
函数获取。
关于mysql - 我需要帮助创建查询以对密码进行 salt 和 md5,然后在 MySQL 表上确认登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263268/