pg_agent_gate:在 PostgreSQL 内部为 AI Agent 的 SQL 操作加装提案与校验闸门
Manuelreyesbravo/pg_agent_gate · Agents propose, PostgreSQL decides: a native gate between AI agents and the database
ELI5:它是什么,解决什么问题
pg_agent_gate 是一个 PostgreSQL 扩展,让数据库能区分 AI Agent 会话与普通应用会话。在 Agent 会话中 SQL 不会直接执行,Agent 只能通过七个动词(discover、propose、dry_run、commit、propose_and_commit、acts、whoami)提案一条语句,由 PostgreSQL 自身基于解析、单语句、类型许可、禁止写 CTE、上下文保持、禁止放大与不透明函数等检查逐项验证,并展示精确影响后再决定是否保留,从而防止模型幻觉产生无 WHERE 的 DELETE、DROP TABLE 或越权读取。
核心能力与快速开始
★ 1 · Shell
- 能做什么
- 以 PostgreSQL 扩展形式在服务端钩子中实施闸门,使 Agent 会话只能提案 SQL 而不能直接执行。提供七个动词:discover 列出 Agent 有权限访问的对象与结构指纹;propose 校验单条语句并登记,不执行;dry_run 在子事务中运行并回滚,返回受影响行数与写入行的前后值;commit 再次校验后执行并保留,每个提案至多提交一次;propose_and_commit 将提案与提交合并为一次调用;acts 查看提案与执行历史及拒绝原因;whoami 显示会话所属 Agent、是否启用闸门。校验包括 parses、single_statement、kind_allowed、no_writing_cte、keeps_its_context、no_amplification、no_opaque_function、resolves,按顺序确保任何拒绝都在不执行的环境下判定。不需要 MCP 服务器。
- 适用场景
- 在将 AI Agent 接入生产 PostgreSQL 时,为其提供数据库层面的操作安全边界,防止模型生成无 WHERE 的 DELETE、DROP TABLE、通过 set_config 绕过行级策略读取其他租户数据等操作。适合需要对 Agent 的读写与 DDL 权限做细粒度控制、希望在变更落库前审查精确影响、并记录 Agent 动作审计轨迹的团队。
- 项目形态
- 可直接使用的工具
- 部署方式
- 以 PostgreSQL 扩展形式安装,运行在 PostgreSQL 18 与 19(开发于 19beta2)中,依赖服务端钩子。可通过 make demo、make docker-demo 或拉取预构建容器镜像体验,镜像为 linux/amd64,在 Apple 芯片 Mac 上需模拟运行。
- 主要依赖
- 使用 make demo 需要 PostgreSQL 18+、Rust 和 cargo-pgrx;仅演示可用 Docker 或 Podman 拉取预构建镜像,无需本地安装 Rust 或 PostgreSQL。
- 使用限制
- 不覆盖已存在且函数体内调用 set_config 的函数(其主体不在语法树中),不应向 Agent 授予此类函数的 EXECUTE 权限。文档列出的威胁模型与“未覆盖”范围需以仓库说明为准。许可证为 Apache-2.0,但未说明 API 成本、商业使用条款等具体条件。
- 许可证
- Apache-2.0
- 最近推送
- 2026-10-09 06:32
资料检查:2026-10-09 07:00 · 卡片整理:2026-10-09 07:00
卡片由 AI 根据仓库资料整理,未进行安装或运行验证 · 本次更新未完成,保留上次成功内容
职业应用
程序员
在开发或维护连接 AI Agent 的 PostgreSQL 应用时,使用该扩展让数据库区分 Agent 会话与普通应用会话:Agent 只能通过 discover、propose、dry_run、commit 等动词提案 SQL,由 PostgreSQL 基于解析、单语句、类型许可、禁止写 CTE、上下文保持、禁止放大与不透明函数等检查逐项验证,并展示精确影响后再决定是否保留,从而防止模型幻觉产生无 WHERE 的 DELETE、DROP TABLE 或越权读取。
查看内容依据
pg_agent_gate 是一个 PostgreSQL 扩展,让数据库能区分 AI Agent 会话与普通应用会话。在 Agent 会话中 SQL 不会直接执行,Agent 只能通过七个动词(discover、propose、dry_run、commit、propose_and_commit、acts、whoami)提案一条语句,由 PostgreSQL 自身基于解析、单语句、类型许可、禁止写 CTE、上下文保持、禁止放大与不透明函数等检查逐项验证,并展示精确影响后再决定是否保留,从而防止模型幻觉产生无 WHERE 的 DELETE、DROP TABLE 或越权读取。
由 AI 根据来源材料整理,未进行安装或运行验证
讨论 0
登录后参与讨论,阅读资讯无需注册。
还没有评论,来分享第一个看法。