PG-SafeUp更新#

数据块满表操作#

如果 active role 可以删除表行,则允许客户端使用DELETE谓词。以下是从假设的日志表中删除旧行的API请求:

curl "http://localhost:3000/logs?time=lt.1991-08-06" -X DELETE

请注意,删除 entire table 通过省略查询参数!

curl "http://localhost:3000/logs" -X DELETE

这可能是偶然发生的,例如将请求从GET切换到DELETE。要防止意外操作,请使用 pg-safeupdate PostgreSQL扩展。如果在未指定条件的情况下执行UPDATE或DELETE,则会引发错误。要安装它,您可以使用 PGXN 网络:

sudo -E pgxn install safeupdate

# then add this to postgresql.conf:
# shared_preload_libraries='safeupdate';

这并不能防止恶意操作,因为有人可以添加不影响结果集的URL参数。要防止出现这种情况,您必须使用数据库权限,禁止错误的用户删除行,并使用 row-level security 如果需要更精细的访问控制。