
最近线上出了个事故,一个极端数据跑了个 sql,没有 where 条件,导致全表更新(泪啊) 我记得 mybatis 可以弄个拦截器,具体怎么搞呢
1 kiracyan 2020-12-21 16:50:33 +08:00 还有这种操作 |
2 anzu 2020-12-21 16:57:27 +08:00 不要用<where>标签 |
3 kran 2020-12-21 17:02:47 +08:00 via Android |
4 Acebiu 2020-12-21 17:03:29 +08:00 可以参照 Mybatis-PageHelper 的拦截器直接写一个。 https://github.com/pagehelper/Mybatis-PageHelper/blob/master/src/main/java/com/github/pagehelper/PageInterceptor.java |
6 qwerthhusn 2020-12-21 17:34:23 +08:00 测试背锅 |
7 taogen 2020-12-21 19:31:00 +08:00 via Android 和 rm -rf / 问题类似,这种问题确实需要拦截 |
8 FieldFarmer 2020-12-21 19:34:22 +08:00 via Android 直接来个 where,不要<where>,这样没条件就会报错了 |
9 Cbdy 2020-12-21 19:38:06 +08:00 via Android 让 dba 把 sql_safe_updates 设置成 1 |
10 moyixuan 2020-12-21 19:38:42 +08:00 后面写个 where 1=1 ,这样没有传条件应该也不起效果吧 |
11 FieldFarmer 2020-12-21 19:43:43 +08:00 via Android @moyixuan 这样没用的,没条件该全表更新还是全表更新了 |
12 leeg810312 2020-12-21 19:53:33 +08:00 via Android 生产库执行 sql 我们都是要审核才能执行,且开发不能直接碰生产库,随便执行 sql 还是太随意了 |
13 janwarlen 2020-12-21 19:55:38 +08:00 没测试? |
14 wellsc 2020-12-21 19:57:13 +08:00 via iPhone Ci 都跑不过吧 |
15 opengps 2020-12-21 19:58:10 +08:00 为啥会没有条件呢?更新时候不得强制指定 where 条件吗? |
16 opengps 2020-12-21 19:59:24 +08:00 想起来个事,以前配置的时候有个极端,如果入参集合为空,where 里的 id in ( ) 不生效。最终是全员自检排查 dao 层代码,增加程序拦截 |
17 lraining 2020-12-21 20:00:26 +08:00 只有 select 可以用<where>,update,delete 全部用 where |
18 daxiguaya 2020-12-21 20:04:14 +08:00 写个拦截器,用 jsqlparser 解析 SQL,剩下的想怎么限制都行. |
21 Masonnn 2020-12-22 14:06:21 +08:00 <if test="param != null"> xxxxxx </if> 这样? |