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

标签

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

时间: 2024-09-20 04:22:49

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

PostgreSQL 10.0 preview 功能增强 - OLAP增强 向量聚集索引(列存储扩展)

标签 PostgreSQL , 10.0 , Vertical Clustered Index (columnar store extension) , 列存储 , 向量聚集索引 背景 未来数据库OLTP+OLAP逐渐模糊化,需求逐渐融合是一个大的趋势,如果你的数据库只支持OLTP的场景,未来可能会成为业务的绊脚石. 在这方面PostgreSQL每年发布的新版本,都给用户很大的惊喜,OLTP已经具备非常强大的竞争力(性能.功能.稳定性.成熟度.案例.跨行业应用等),而OLAP方面,新增的feat

PostgreSQL 10.0 preview 功能增强 - 增加access method CHECK接口amcheck

标签 PostgreSQL , 10.0 , amcheck , 逻辑一致性检测 , 物理存储检测 背景 一些高端存储.包括ZFS文件系统,在使用了RAID后,有块检测和异常块的修复功能. 对于数据库来说,数据的可靠性是非常重要的指标,例如: 1. 写进入是什么,读出来就应该是什么. 2. 当操作系统的collate发生变化时,索引的顺序可能与实际的collate顺序不匹配.造成不稳定现象. 3. 数据块partial write,可能导致数据损坏. 4. 内存页异常,使用到某些异常页时,可能带

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

标签 PostgreSQL , 10.0 , 后台运行 , pg_background_launch , pg_background_result , pg_background_detach , pg_background 背景 当用户在管理数据库时,如果要在交互式界面跑一些QUERY,但是不知道QUERY要运行多久,担心网络问题或者其他问题导致终端断开,QUERY执行情况不明的话.就需要后台运行这个功能了. 后台运行在LINUX中也很常见,比如 nohup ls -la / >/tmp/re

PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)

标签 PostgreSQL , 10.0 , HTAP , 动态编译 , JIT , LLVM , 表达式 , 函数跳转 背景 数据库发展了几十年,出现了很多产品,有面向OLTP(在线事务处理)的,有面向OLAP(在线分析)的. 虽然两个场景各有需求特色,但是企业需要为其需求买单,因为目前很少有产品可以同时满足在线处理和在线分析的需求. 比如一家企业,通常都有业务的波峰波谷,比如游戏业务,通常波谷可能是在凌晨,因为大多数人都睡了.而波峰可能出现在每天的工作闲时.游戏运营时段.节假日等. 为了分析

震精 - PostgreSQL 10.0 preview 性能增强 - WARM提升一倍性能

标签 PostgreSQL , 10.0 , WARM , 写放大 , 索引写放大 背景 目前,PostgreSQL的MVCC是多版本来实现的,当更新数据时,产生新的版本.(社区正在着手增加基于回滚段的存储引擎) 由于索引存储的是KEY+CTID(行号),当tuple的新版本与旧版本不在同一个数据块(BLOCK)的时候,索引也要随之变化,当新版本在同一个块里面时,则发生HOT UPDATE,索引的值不需要更新,但是因为产生了一条新的记录,所以也需要插入一条索引item,垃圾回收时,将其回收,因此

PostgreSQL 10.0 preview 功能增强 - 逻辑订阅端 控制参数解说

标签 PostgreSQL , 10.0 , 逻辑订阅 背景 PostgreSQL 逻辑订阅相关文章请参考 <PostgreSQL 10.0 preview 变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目> <PostgreSQL 10.0 preview 功能增强 - 备库支持逻辑订阅,订阅支持主备漂移了> <PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据> <PostgreSQ

PostgreSQL 10.0 preview 性能增强 - 分区表性能增强(plan阶段加速)

标签 PostgreSQL , 10.0 , 分区表 , 子表 , 元信息搜索性能增强 背景 PostgreSQL 10.0 增强了分区表的子表搜索性能,对于涉及分区表包含子表特别多的QUERY,可以提升性能. 性能分析 get_tabstat_entry, find_all_inheritors成为主要瓶颈. Hello. I decided to figure out whether current implementation of declarative partitioning has

PostgreSQL 10.0 preview 多核并行增强 - 并行hash join支持shared hashdata, 节约哈希表内存提高效率

标签 PostgreSQL , 10.0 , 多核并行增强 , shared hash表 , hash join 背景 PostgreSQL 9.6支持哈希JOIN并行,但是每个worker进程都需要复制一份哈希表,所以会造成内存的浪费,小表无妨,但是大表的浪费是非常大的. 因此10.0做了一个改进,使用共享的哈希表. Hi hackers, In PostgreSQL 9.6, hash joins can be parallelised under certain conditions, b

PostgreSQL 10.0 preview 功能增强 - 老板特性, LONG SQL过程可视 pg_stat_progress_vacuum

标签 PostgreSQL , 10.0 , pg_stat_progress_vacuum 背景 在PostgreSQL中执行SQL时,如果SQL执行时间比较长,总想知道它执行到哪里了,还剩余多少任务,剩余多少时间. 目前PostgreSQL增加了对VACUUM的可视监控(目前涵盖了autovacuum与手工的vacuum命令,但是不涵盖VACUUM FULL),将来还会加入更多的progress动态视图,方便用户了解LONG SQL或者任务的执行情况. 动态视图解释如下 可以了解每个vacu