续集你正在使用sql安全更新错误

Posted

技术标签:

【中文标题】续集你正在使用sql安全更新错误【英文标题】:sequelize you are using sql safe update error 【发布时间】:2017-11-15 09:22:33 【问题描述】:

我随机收到此错误。我根据用户名从 activeusers 表中删除它有时会给我错误并且有时会顺利运行。 这是我的删除代码

说吧

 data=nickname:'asad',id:1
 activeusers.destroy(where:username:data.nickname ).then(res=>
 );

我已从 sql 工作台关闭 sql 安全更新,但问题仍然存在 我怎样才能永久摆脱这个错误

【问题讨论】:

黑底红字你怎么看出来? 这不是很有趣@P.Salmon 【参考方案1】:

这是 mysql 更新的常见问题。这是您的查询:

DELETE FROM ActiveUsers WHERE username = 'mazhar.hayat@ibexglobal.com'

错误源于您没有在WHERE 子句中使用主键列。如果您根本没有 WHERE 子句,您也会看到此错误。 MySQL 有一种模式,它认为这样的 DML 查询是不安全的,因为它的范围很广,并且存在损坏数据的风险。

有一个黑客解决方案可能会奏效。您可以修改查询以提及主键列,如下所示:

DELETE
FROM ActiveUser
WHERE username = 'mazhar.hayat@ibexglobal.com' AND id=id

这可能会使 MySQL 误以为查询是安全的,因为它在 WHERE 子句中提到了主键列 id

但我建议您直接在 MySQL 中关闭安全更新模式。编辑您的启动脚本并确保脚本中未提及--safe-updates--i-am-a-dummy

编辑:

如果您想从destroy 处理这个问题,那么查询选项是唯一的选项:

Post.findAll(
     where: ["username = ? AND id = id", data.nickname] 
).success()

【讨论】:

我正在使用 sequelize 如何在 sequelize destroy 函数中做到这一点 @Asad 那么您将不得不尝试查询技巧 q​​.v。我的编辑。请注意,我不建议这样做;配置您的 MySQL 服务器以关闭安全更新模式。这比在你的 javascript 代码中添加 MySQL 配置文件更可取。 我已关闭此设置,但它有随机行为:( @Asad 你是怎么关掉它的?如果您在会话级别将其关闭,那么每个新会话也需要将其关闭。 我把它关掉了我点击工作台edit菜单然后prefrences =>然后SQL editor然后取消标记safe_update选项@Tim

以上是关于续集你正在使用sql安全更新错误的主要内容,如果未能解决你的问题,请参考以下文章

sql MySQL禁用查询的安全更新模式

安全牛学习笔记?KALI版本更新和手动漏洞挖掘(SQL注入)

MySQL Workbench 的安全设置

如何防止nodejs中的sql注入和续集? [关闭]

WINDOWS安全更新和360卫士漏洞补丁的区别

更新到 Android 11 后 Admob 中出现严格的安全 Cookie 策略错误