如何为 AI Agent 提供安全的数据库访问权限
给 AI Agent 访问生产数据库的权限具有巨大的风险。仅使用只读用户是不够的。Agent 无法判断意图或数据的敏感性。如果你授予写权限,提示词注入(prompt injection)可能会让一个原本有帮助的 Agent 变成具有破坏性的 Agent。
你需要两层保护来确保数据安全。
第一层:静态数据库控制
这些是数据库引擎内部的基础设置。请首先使用这些设置:
- 最小权限角色:为 Agent 创建一个特定的角色。绝不要使用管理员账号。
- 只读副本:将分析型 Agent 指向副本,以免它们拖慢生产环境。
- 行级安全性 (Row-level security):使用策略来限制 Agent 可以查看的数据。
- 语句超时:防止失控的查询导致服务器崩溃。
- 白名单:将连接限制在特定的主机上。
第二层:运行时控制平面 (The Runtime Control Plane)
静态控制仅检查身份。它们无法阻止 Agent 窃取数据或执行恶意指令。你需要一个位于 Agent 和数据库之间的控制平面。
这一层必须完成四件事:
- 分类:将每个查询标记为读取、写入或模式(schema)变更。
- 执行默认拒绝:除非你明确允许,否则拦截所有操作。
- 拦截高风险操作:要求人工审批批量删除或模式变更。
- 记录一切:保留每项操作和每次审批的不可篡改日志。
为什么这很重要:
如果你将规则放在提示词(prompt)中,Agent 可能会忽略它们。控制平面存在于 Agent 的上下文之外。它看到的是实际的查询,而不是 Agent 的计划。这可以保护你免受提示词注入的攻击。
使用此清单来实现安全访问:
- 每个 Agent 使用专用角色。
- 使用只读副本进行探索。
- 实现行级安全性。
- 设置语句超时。
- 将所有流量路由通过控制平面。
- 使用默认拒绝策略。
- 高风险任务需要人工审批。
- 保留不可篡改的审计日志。
静态控制完成其职责,而控制平面完成剩下的工作。两者缺一不可。
Optional learning community: https://t.me/GyaanSetuAi
