2026年6月10日 2 分钟阅读

如何防止 AI Agent 泄露敏感数据?Gate 确定性 PII 脱敏工具详解

tinyash 0 条评论

问题:你的 AI Agent 正在把你的数据”送”给大模型

当你让 Claude Code 或 Codex 查询数据库时,是不是从来没想过这个场景——

tkpsql query --sql "SELECT * FROM users WHERE id = 42"

返回的结果中包含用户邮箱、手机号、身份证号甚至信用卡号。这些数据就这样原封不动地进入了 LLM 的上下文窗口,随 API 请求发送到云端。

这不是假设——这是每个用 AI Agent 连接数据库或内部 API 的开发团队每天都在经历的事情。结果就是:你的敏感数据被训练在别人的模型里

为什么这是一个不容忽视的问题

维度影响
合规风险GDPR、CCPA、《个人信息保护法》等法规要求 PII 数据不得外传
商业机密内部系统查询可能暴露客户数据、薪资信息、业务策略
不可追溯LLM 的训练数据使用难以审计,数据被用于训练后无法撤回
普遍性只要 Agent 能执行 CLI 命令或调用 MCP 工具,就可能接触到敏感字段

AI 编码 Agent 越来越强大,也越来越频繁地访问数据库和内部 API。每次 psqlmysqlcurl internal-api 调用都是潜在的数据泄露窗口。

传统方案的局限

方案 A:LLM 驱动的 PII 检测(不靠谱)

很多 PII 防护方案本身也是 LLM——把你的数据发送给另一个模型来判断是否包含敏感信息。

对比项LLM 方案问题
确定性❌ 每次运行结果不同不可复现,不可审计
数据外泄❌ 数据仍然发送给模型 API相当于二次泄露
延迟增加一次 API 往返200ms-2s 额外开销
误报率未知黑盒决策,无法追踪

方案 B:数据库级脱敏(需要管理员权限)

数据库级动态数据脱敏(DDM)是正确做法——前提是你控制数据库。但如果使用的是第三方/供应商数据库,或者 Agent 的调用路径绕过了 DDM(如通过 MCP 工具访问),DB 脱敏就覆盖不到。

方案 C:什么都不做(最常见)

大多数团队的选择——因为配置复杂、工具不成熟、或者”还没出事”。但这不是长久之计。

Gate:确定性的 PII 脱敏方案

Gate(108⭐, Rust, MIT)是一个基于确定性规则的 PII 脱敏工具——用正则表达式 + 列名启发式 + Luhn 算法检测敏感数据,在数据到达模型之前自动替换为 [PII:type] 占位符。

核心差异在于:不是用另一个模型来判断——而是用硬规则,100% 可复现、可审计。

核心优势

GateLLM 方案数据库脱敏
决策方式正则 + 启发式模型推理SQL 规则
确定性✅ 每次结果相同❌ 随机波动
数据本地处理✅ 不离机❌ 发送给模型 API
延迟< 10ms200ms-2s0(数据库原生)
可审计✅ 每条决策可追踪❌ 黑盒
覆盖 MCP 工具

它能做什么

Gate 覆盖了 AI Agent 访问数据的两条路径

Bash 工具路径:Agent 的每条 Bash 命令经过 Gate 钩子,匹配的命令被静默重写,输出经扫描后返回模型。整个过程透明——Agent 看到的仍然是正常 JSON 响应,只是敏感字段被替换。

MCP 路径:Gate 作为透明代理注册在 Agent 与 MCP 服务器之间,拦截 tools/call 响应进行脱敏,其他消息透传。

输出示例:

{
  "id": 1,
  "full_name": "[PII:name]",
  "email": "[PII:email]",
  "ssn": "[PII:ssn]",
  "card_number": "[PII:credit_card]",
  "_gate_summary": {
    "redacted": 4,
    "types": ["name", "email", "ssn", "credit_card"],
    "warnings": []
  }
}

使用场景

  1. 数据库查询:所有通过 CLI 工具(psql, mysql, tkpsql)的查询输出自动脱敏
  2. 内部 API 调用:curl 等工具返回的 JSON 响应中的 PII 字段被屏蔽
  3. MCP 服务器:Agent 通过 MCP 协议访问的任何数据源同样受保护
  4. 生产环境审计:gate retro 汇总所有脱敏记录,生成审计报告

快速上手

Gate 安装只需要一条命令:

brew tap GaaraZhu/gate && brew install gate

cargo binstall gate

配置和启用:

gate config

gate init

gate init --wrap-mcp

gate validate

每条命令的钩子注册格式:

gate init --harness claude-code    # Claude Code(默认)
gate init --harness codex          # Codex CLI
gate init --harness cursor         # Cursor
gate init --harness opencode       # OpenCode
gate init --harness gemini         # Gemini CLI
gate init --harness copilot-cli    # GitHub Copilot CLI

先扫描再部署:先扫描数据库结构确认有哪些 PII 风险:

psql -U user -h host -d dbname -c "SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS" | gate scan

这会输出每张表的 PII 风险评估报告——无需任何配置!

核心功能详解

1. 模式扫描(Schema Scan)

gate scan 在配置任何防护之前就能发现你的数据库中有多少敏感字段。管道输入表名→列名的查询,输出每张列的风险评分。

2. 双通道保护

Bash 路径和 MCP 路径同时保护,不会因为 Agent 通过不同渠道访问数据而出现漏洞。

3. 审计回溯(Retro)

gate retro 聚合所有历史脱敏记录——总查询次数、脱敏字段数量、命中率、按工具和 PII 类别分类——生成可直接用于合规审计的报告。

如果某次检测是低置信度匹配,gate retro 会单独列出建议添加白名单的字段。

4. 白名单/黑名单

对于误报的字段(如测试表中的假数据),可以用 gate allowlist add 直接放行。

需要注意的限制

Gate 不是万能的,它有明确的作用边界:

  • 只保护配置的工具:不在 tools 列表中的命令,输出不被扫描
  • 只保护 JSON 输出:纯文本、CSV 等格式未经检查
  • 无法处理自由文本中的 PII:散落在备注字段中的身份证号不会被检测
  • 对抗性攻击防范有限:如果 Agent 被恶意操控,可以绕过检测
  • 不保护已进入上下文的 PII:之前的对话轮次或文件读取中的敏感信息不受影响

这些限制都在威胁模型文档中有详细说明。

总结

Gate 代表了一种更务实的 AI Agent 数据安全思路:不要用另一个模型来保护模型,而是用确定性的规则来拦截敏感数据。

它的价值在于:

  • 零改动:不需要修改 Agent 配置、提示词或数据库
  • 低开销:< 10ms 延迟,对开发体验几乎无影响
  • 可审计:每条脱敏决策都可以追溯到具体规则
  • 互补性:和数据库脱敏方案互补,覆盖现有方案覆盖不到的路径

如果你在用 AI Agent 访问数据库或内部 API,Gate 是一个值得花 5 分钟配置的工具——花的时间远比处理一次数据泄露要少。

🔗 GitHub: https://github.com/GaaraZhu/gate 🔗 设计文档: https://gaarazhu.github.io/introducing-gate/

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。