标签

PostgreSQL , 10.0 , 主动防御 , 是否允许执行不带where条件的update\delete


背景

你是否曾经被不带where 条件的SQL误伤过呢?

比如

update tbl set amount=amount-100 where id=?;

缺少where条件,就变成了

update tbl set amount=amount-100;

正常情况下,这样的SQL不应该在业务逻辑中出现。通常出现在SQL注入,又或者误操作中。

如果你真的不小心执行了,那么全表的数据都会被删除或者更新,最快的恢复手段是flash back query,PostgreSQL中,可以使用xlog,生成UNDO,比如将xlog_level设置为logical,同时表的match必须设置为记录FULL OLD VALUE。

那么就有方法从xlog中生成UNDO,flash back该表。

flashback query属于被动防御的话,数据库有没有主动防御措施呢?

主动防御

PostgreSQL提供了一个机制,允许你设置参数

+bool allow_empty_deletes = true;
+bool allow_empty_updates = true;

从而允许是否能执行不带where 条件的update或delete.

这个参数可以设置为全局、会话级、用户级、库级、或者事务级别。

设置后,你就能控制是否允许执行不带条件的update,delete了。

扩展

其实不带where条件的update, delete还不够全面。比如where 1=1或者where true,都需要防范。

还有我们甚至可以设置百分比(比如百分之多少的记录被UPDATE,DELETE时,或者超过多少记录被DML后,回退整个事务)

通过PostgreSQL提供的钩子可以完成以上功能。

这个patch的讨论,详见邮件组,本文末尾URL。

PostgreSQL社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以PostgreSQL的稳定性也是远近闻名的。

参考

https://commitfest.postgresql.org/12/948/

https://www.postgresql.org/message-id/flat/20160721045746.GA25043@fetter.org#20160721045746.GA25043@fetter.org

https://www.postgresql.org/message-id/attachment/45216/training_wheels_001.patch

PostgreSQL 10.0 preview 主动防御 - 禁止执行全表删除、更新(可配置)相关推荐

  1. PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

    标签 PostgreSQL , 10.0 , 后台运行 , pg_background_launch , pg_background_result , pg_background_detach , p ...

  2. PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)...

    标签 PostgreSQL , 10.0 , 2PC , txid_status , unknown事务 背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如 ...

  3. PostgreSQL 10.0 preview 功能增强 - 支持EUI-64格式MAC地址类型

    标签 PostgreSQL , 10.0 , eui-64 , mac 背景 PostgreSQL 是全球最先进的开源数据库,所谓先进,体现在很多方面: 支持扩展类型 支持扩展操作符 支持扩展函数 支 ...

  4. 元旦技术大礼包 - 2017金秋将要发布的PostgreSQL 10.0已装备了哪些核武器?

    标签 PostgreSQL , 10.0 , 金秋 , 元旦 , 大礼包 , commitfest 背景 早上送给大家的新年大礼包,一年一个大版本是PostgreSQL社区的传统,虽然发布时间通常为秋 ...

  5. PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合

    前言 大家都知道,PostgreSQL 近几大版本中加入了很多 OLAP 相关特性.9.6 的并行扫描应该算最大的相关特性.在今年发布的 10.0 中,并行扫描也在不断加强,新增了并行的索引扫描. 我 ...

  6. Android 10.0 Launcher3桌面禁止左右滑动

    1.1概述 在10.0的rom定制化开发中,由于Launcher3有一些功能需要定制,这样的需求也好多的,现在功能需求要求桌面固定在Launcher3的app列表页,不让左右移动,就是禁止左右移动的功 ...

  7. Android 10.0 系统framework禁止访问应用信息页

    目录 1.概述 2.系统frameworks禁止进入应用信息页的核心代码 3.系统frameworks禁止进入应用信息页的核心代码功能分析 3.1AppErrorDialog.java关于错误信息的分 ...

  8. [开源] .Net ORM FreeSql 1.10.0 稳步向前

    写在开头 FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白).今天带点干货和湿货给大家,先说下湿货. 认识我的人,知道 CSRedisCore ...

  9. .NET Core 3.0 Preview 7 已经发布

    .NET Core 3.0 Preview 7 已经发布,Visual Studio 用户需要 Visual Studio 2019.16.3 preview 1(将于本周晚些时候发布)才能使用 .N ...

最新文章

  1. ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for
  2. java多线程基础视频_【No996】2020年最新 Java多线程编程核心基础视频课程
  3. QML Imports声明
  4. pycharm如何解决新建的文件没有后缀的问题
  5. 毕业2月有余,苏州同学腐败第二次大聚会
  6. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...
  7. springBoot集成Activiti6
  8. 分享几个软件测试逻辑思维和综合面试题【含答案】
  9. 柱状图怎么设置xy轴_经验-Origin做柱状图常遇问题-柱状图X坐标轴如何设置—小技巧...
  10. C语言4位BCD码加法器,四位二进制BCD码加法器.doc
  11. linux命令日志抓取,linux抓取某条日志记录的命令
  12. 微信小程序开发之——比较数字大小-页面样式(2.3)
  13. 学习缓冲区溢出攻击的前提知识
  14. win7系统无法激活问题
  15. 语法分析器(c++)
  16. 电除尘器 matlab,电除尘用高频高压直流叠加高压脉冲电源的制作方法
  17. python实战-02-基础语法及pip安装
  18. sap 无料号采购 直接物料组消耗到成本中心
  19. LOJ 3055 「HNOI2019」JOJO—— kmp自动机+主席树
  20. FL Studio 21测试版更新、新功能和AI智能编曲插件

热门文章

  1. 要想步入程序开发行列,就不得不知道的事情汇总
  2. Windows平板装Android双系统及建立UEFI引导全攻略(windows8.1+android6+phoenix)
  3. oracle ogg重启mgr,OGG的常见运维任务指南
  4. 「tricks」整体DP
  5. 方正证券手机网上开户流程
  6. 蚁狮优化算法( Ant Lion Optimizer,ALO)-Matlab源码
  7. ComponentOne Wijmo HTML Editor 在光标处添加文本
  8. 狂拽炫酷校园拽少与阳光善良少女的校园事
  9. 华为鸿蒙商标被驳回复审;小米起诉美国政府诉讼达成和解;腾讯防大量群消息骚扰专利获授权 | EA周报...
  10. 一刀斩 :“SVN” failed to start 服务启动失败