Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用Knex对where子句的值应用函数?_Mysql_Node.js_Knex.js_Objection.js - Fatal编程技术网

Mysql 如何使用Knex对where子句的值应用函数?

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 }) ; 通过查看文档,我发现没有任何示例允许这样做

基本上,我想知道如何使用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
  })
;
通过查看文档,我发现没有任何示例允许这样做。这可能吗?

您可能需要使用

顺便说一句,你不应该使用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]);