数据库智能体最重要的设计不是让模型自由写 SQL,而是把可执行范围缩成少量审核过的查询。n8n 可以让 AI Agent 调用子工作流工具,子工作流再用 Postgres 节点执行固定 SQL 和参数绑定。 示例只演示订单状态查询,未连接你的数据库实测;数据库权限、租户隔离、隐私字段和审计必须由数据库及服务端强制执行,提示词不能承担安全边界。
本篇验收要点:数据库凭证使用只能 SELECT 指定视图的账号,工具内部执行固定 SQL,不把模型输出直接拼成查询。 智能体只可传入订单号和租户标识,子工作流校验格式后用 Query Parameters 绑定,结果只返回批准的字段。

开始前准备
- 一个专用只读数据库账号
- 只含必要列的视图或查询
- 5 条允许查询和拒绝查询的测试样例
- 可定位租户或用户归属的可信字段
按顺序搭建
- 在 Postgres 创建或选择只读角色,只授予目标 schema 或视图的 SELECT 权限;用该账号手工验证 UPDATE、DELETE 必须失败。
- 新建子工作流,输入字段固定为 tenant_id 和 order_no。先检查非空、长度和格式,tenant_id 必须来自已认证的上游,不能让聊天用户自行声明。
- 加入 Postgres 节点,操作选择执行查询,SQL 保持固定,并用 Query Parameters 绑定值。限制返回行数,字段只保留订单号、状态和更新时间。
- 在主工作流把子工作流作为工具连接 AI Agent。工具描述明确“只查单个订单状态”,不要描述成“查询数据库”。
- 用存在、不存在、跨租户、注入字符串和超长参数五类用例执行,核对结果与数据库审计日志。
可复制的最小示例
固定查询的形状可以这样设计,参数占位方式以当前 Postgres 节点文档为准:
SELECT order_no, status, updated_at
FROM agent_order_status
WHERE tenant_id = $1 AND order_no = $2
LIMIT 1;
Query Parameters: {{ $json.tenant_id }}, {{ $json.order_no }}
怎样验收结果
验证标准是合法订单只返回批准的三列,跨租户查询和异常参数没有数据或被拒绝,数据库账号无法写入,并且工具的一次调用能在 n8n 与数据库日志中关联。
- 只读账号执行 UPDATE 得到权限错误
- 订单号中的引号不会改变 SQL 结构
- 不同租户的相同订单号不会串数据
- 没有命中时返回明确的未找到状态而非模型补写
常见失败与处理
- Agent 生成整段 SQL:取消自由 SQL 输入,改为固定子工作流。
- 参数表达式被当成文本:在节点执行数据中检查实际 Query Parameters。
- 返回敏感列:建立专用视图,并在工作流输出层再次挑选允许字段。
读者下一步是先用只读账号和固定 tenant_id 在 Postgres 节点直接跑通一条订单查询,再把它封装成 AI Agent 工具。
相关问答
只在提示词里写“禁止删除”够吗?
不够。模型可能误解或被提示注入,数据库账号本身必须没有写权限。
能让智能体查询任意报表吗?
应为每类报表建立独立、参数明确的工具;不要把通用 SQL 控制台暴露给模型。
官方资料与适用边界
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32415.html