- 文档首页
云数据库 PostgreSQL 版
用户指南
插件
DML 语句安全防护 (safeupdate)
插件
DML 语句安全防护 (safeupdate)
DML 语句安全防护 (safeupdate)
safeupdate 是一款轻量级的 PostgreSQL 插件,旨在通过强制 UPDATE 和 DELETE 语句必须包含 WHERE 子句来提升数据库操作的安全性。当它检测到可能导致全表数据被意外修改或删除的 DML 语句时,会立即抛出错误并阻止其执行。
此插件对于那些通过 PostgREST 等 API 网关向外部暴露数据库写入接口的场景尤其有用,能够有效防止因客户端错误或恶意攻击引发的灾难性数据丢失。
- 开放的 API 环境:防止通过 RESTful API 发送的请求意外地修改或删除了整张表。
- 开发与测试环境:帮助开发者养成良好的 SQL 编写习惯,避免在开发过程中误操作数据。
- 多人协作的数据库:为团队提供一个基础的安全防护层,减少人为错误的风险。
safeupdate 的启用和禁用是通过修改 PostgreSQL 的配置文件 postgresql.conf 中的 shared_preload_libraries 参数来控制的,修改后需要重启数据库服务才能生效。
- 修改参数 shared_preload_libraries,新增 safeupdate 值。如果已有其他库,请使用逗号分隔。关于修改参数的详细信息,请参见修改参数。
- 修改参数 shared_preload_libraries,移除 safeupdate 值。
启用插件后,任何不带 WHERE 子句的 UPDATE 或 DELETE 语句都将被拦截。
只有当 UPDATE 和 DELETE 语句包含 WHERE 子句时,才能成功执行。
注意
safeupdate 的检查非常严格,即便是 WHERE 1=1 这样逻辑上等同于全表操作的条件也会被视为有效并通过检查。因此,它主要用于防止因忘记添加 WHERE 子句而导致的失误,而不是防止逻辑上错误的条件。
- safeupdate 的行为可以通过一个 GUC 参数进行运行时控制。
- 作用:控制是否启用插件对 DML 语句的筛选条件强制检查。
最近更新时间:2026.03.31 10:39:12