给 AI 代理数据库角色设置 statement_timeout 和只读事务,是常见的加固手段。但实测表明,这些限制只约束会话的初始状态,代理在自己的会话里可以随时解除。
用 SET 命令即可当场关闭限制,且不会留下 ALTER 痕迹。更隐蔽的是通过连接串或 PGOPTIONS 环境变量传入 -c 参数,source 显示为 client,优先级高于角色级 user 设置,日志里连 SET 都看不到。
PostgreSQL 15 引入的 GRANT SET ON PARAMETER 也无法补救:USERSET 参数本就允许所有角色修改,REVOKE 不会写入 pg_parameter_acl,实际不生效。真正有效的约束是 CONNECTION LIMIT、对象权限和 pg_terminate_backend,这三者无法从会话内部绕过。
测试基于 PostgreSQL 18.6,事务超时对比在 17.11 和 16.15 上完成。给代理数据库授权时,别把超时和只读设置当作安全边界。
🔗 原文:postgr.es/p/9ul
#开发者 #工具 #PostgreSQL #数据库安全 #AI代理 #权限控制 #USERSET
@DevToolboxHub