Mysql 如何使用Knex对where子句的值应用函数?
基本上,我想知道如何使用Knex生成此查询:Mysql 如何使用Knex对where子句的值应用函数?,mysql,node.js,knex.js,objection.js,Mysql,Node.js,Knex.js,Objection.js,基本上,我想知道如何使用Knex生成此查询: SELECT * FROM usr_info WHERE login = ? AND password = PASSWORD(?) 例如: knex('usr_info') .where({ 'login': login, 'password': password // <-- specify a function to wrap the value into }) ; 通过查看文档,我发现没有任何示例允许这样做
SELECT * FROM usr_info WHERE login = ? AND password = PASSWORD(?)
例如:
knex('usr_info')
.where({
'login': login,
'password': password // <-- specify a function to wrap the value into
})
;
通过查看文档,我发现没有任何示例允许这样做。这可能吗?您可能需要使用
顺便说一句,你不应该使用MySQL的密码功能来验证你自己的应用程序。此函数在MySQL 8.0.11中被删除。在MySQL 5.7中,它已被弃用,并注意到:
MySQL服务器中的认证系统使用密码;您不应该在自己的应用程序中使用它。为此,考虑一个更安全的函数,例如Sa2。
此外,将明文密码传递给查询不是一个好主意,因为它可能以明文形式记录在查询日志中
相反,我建议您在查询中只搜索登录名,然后结果将包括存储在数据库中的哈希密码。您可以对应用程序代码中的密码进行散列,并将其与查询返回的散列进行比较。您可能需要使用
顺便说一句,你不应该使用MySQL的密码功能来验证你自己的应用程序。此函数在MySQL 8.0.11中被删除。在MySQL 5.7中,它已被弃用,并注意到:
MySQL服务器中的认证系统使用密码;您不应该在自己的应用程序中使用它。为此,考虑一个更安全的函数,例如Sa2。
此外,将明文密码传递给查询不是一个好主意,因为它可能以明文形式记录在查询日志中
相反,我建议您在查询中只搜索登录名,然后结果将包括存储在数据库中的哈希密码。您可以对应用程序代码中的密码进行散列,并将其与查询返回的散列进行比较。是的,我知道实现中存在安全问题。不幸的是,这是一个十多年前的系统,一切都与此相关。最终,auth模块将被重新编写,但这就是它现在的样子。我理解,但我认为这是一个更糟糕的问题,因为这个应用已经有十年的历史了,仍然没有人愿意纠正严重的安全缺陷。但这是一个管理问题,而不是技术问题。FWIW问题正在得到纠正,到目前为止,这只是时间问题。这一点的关键是,我可以使用当前用户和数据创建一个临时身份验证模块。一切都过时了:是的,我知道实现的安全问题。不幸的是,这是一个十多年前的系统,一切都与此相关。最终,auth模块将被重新编写,但这就是它现在的样子。我理解,但我认为这是一个更糟糕的问题,因为这个应用已经有十年的历史了,仍然没有人愿意纠正严重的安全缺陷。但这是一个管理问题,而不是技术问题。FWIW问题正在得到纠正,到目前为止,这只是时间问题。这一点的关键是,我可以使用当前用户和数据创建一个临时身份验证模块。一切都过时了:
knex('usr_info')
.whereRaw('login = ? AND password = PASSWORD(?)', [login, password]);