mybatis 如何拦截空 where 条件的 sql

2020-12-21 16:49:00 +08:00
 duanzs

最近线上出了个事故,一个极端数据跑了个 sql,没有 where 条件,导致全表更新(泪啊) 我记得 mybatis 可以弄个拦截器,具体怎么搞呢

3543 次点击
所在节点    MySQL
21 条回复
kiracyan
2020-12-21 16:50:33 +08:00
还有这种操作
anzu
2020-12-21 16:57:27 +08:00
不要用<where>标签
kran
2020-12-21 17:02:47 +08:00
Acebiu
2020-12-21 17:03:29 +08:00
duanzs
2020-12-21 17:03:38 +08:00
@anzu 这个还是要靠人来控制

@kran 没用这个
qwerthhusn
2020-12-21 17:34:23 +08:00
测试背锅
taogen
2020-12-21 19:31:00 +08:00
和 rm -rf / 问题类似,这种问题确实需要拦截
FieldFarmer
2020-12-21 19:34:22 +08:00
直接来个 where,不要<where>,这样没条件就会报错了
Cbdy
2020-12-21 19:38:06 +08:00
让 dba 把 sql_safe_updates 设置成 1
moyixuan
2020-12-21 19:38:42 +08:00
后面写个 where 1=1 ,这样没有传条件应该也不起效果吧
FieldFarmer
2020-12-21 19:43:43 +08:00
@moyixuan 这样没用的,没条件该全表更新还是全表更新了
leeg810312
2020-12-21 19:53:33 +08:00
生产库执行 sql 我们都是要审核才能执行,且开发不能直接碰生产库,随便执行 sql 还是太随意了
janwarlen
2020-12-21 19:55:38 +08:00
没测试?
wellsc
2020-12-21 19:57:13 +08:00
Ci 都跑不过吧
opengps
2020-12-21 19:58:10 +08:00
为啥会没有条件呢?更新时候不得强制指定 where 条件吗?
opengps
2020-12-21 19:59:24 +08:00
想起来个事,以前配置的时候有个极端,如果入参集合为空,where 里的 id in ( ) 不生效。最终是全员自检排查 dao 层代码,增加程序拦截
lraining
2020-12-21 20:00:26 +08:00
只有 select 可以用<where>,update,delete 全部用 where
daxiguaya
2020-12-21 20:04:14 +08:00
写个拦截器,用 jsqlparser 解析 SQL,剩下的想怎么限制都行.
duanzs
2020-12-22 11:02:16 +08:00
@opengps 我们就是这个问题
opengps
2020-12-22 11:53:10 +08:00
@duanzs 如果不从程序 dao 层处理,那就得把 where 强制要求写上个 where 1=2 or (真实条件)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX