FutrixData logo FutrixData
PII 脱敏

面向 AI agent 的 PII 脱敏 — 字段级敏感度分级

在 agent 结果路径上,FutrixData 会在结果行返回 MCP、Skill 或 CLI 调用方之前,将敏感结果值替换为密钥派生的加盐值的哈希字符串。替换采用基于本地密钥的确定性散列算法,密钥派生自存储在操作系统级密钥库中的本地密钥。确定性是关键所在:agent 即使看不到原始值,也仍然可以执行连接、分组与计数。

AI 场景中的 PII 脱敏意味着什么

传统脱敏在数据存储前或在 UI 显示之前重写值。面向 AI agent 的 PII 脱敏把重写时机移到结果离开数据库的那一刻 — 即结果行从数据库流向 LLM 上下文之前。agent 仍然能拿到格式正确、连接键稳定、等值语义保留的行;它只是看到 masked:v1:8f3a1c9b72e04d11,而不是 alice@example.com

这一点之所以重要,是因为一旦数据进入 agent 的上下文,它就可能流向外部模型、插件、日志系统、调试抓取与 token 转发服务 — 这些都是企业治理无法触及的位置。

五级敏感度分级(可扩展)

FutrixData 内置一个L1~L5 敏感度分级模型,等级可配置,默认如下。

等级含义示例
L1 公开非敏感的业务数据idstatuscreated_at
L2 内部内部标识与元数据user_idsession_idrequest_id
L3 机密间接的个人信息、行为、位置ip_addressuser_agentdevice_id
L4 敏感直接的个人信息、财务、医疗emailphonesalarydate_of_birth
L5 关键凭证、支付工具、高敏感 PIIpasswordcredit_cardapi_secrethome_address

默认情况下,agent 可以明文获得 L1–L3,L4 与 L5 在到达 agent 前会被替换为稳定哈希。agent 可访问范围可编辑,例如你也可以将默认设置改为仅允许 agent 访问 L1–L2。

FutrixData 在 agent 结果路径上如何脱敏

脱敏对每个值确定性地计算:

  1. 将原始字段值转换为字符串。
  2. 基于(数据源、字段)从存储在操作系统级密钥库的本地密钥派生 HMAC 密钥。该本地密钥在首次启动时生成,留在主机上,永远不离开主机;同一原始值在不同数据源或不同字段下会产生不同的哈希。
  3. 使用派生出的密钥对原始值计算 HMAC-SHA256。
  4. 取前 16 个十六进制字符。
  5. 添加 masked:v1: 前缀,将脱敏后的数据返回给 agent。

同一安装内同一输入产生同一密钥,因此 agent 仍然可以做连接、分组、distinct 计数与等值判断 — 全程看不到原始值。映射在没有本地密钥时是单向的。确定性脱敏降低泄露面 — 它不是完整的匿名化。逆向请见 脱敏限制

两种分级路径

FutrixData 支持两种敏感度分级方式 — 两者写入同一分级存储。

合规视角

GDPR 第 5 条第 1 款 (c) 项要求数据最小化 — 仅处理必要的内容。欧洲数据保护委员会已明确:当假名化数据仍可通过附加信息被关联回个人时,它仍然属于个人数据。PII 脱敏并不会"让合规消失";它降低泄露面,让结果离开数据库的环节更易于审计与治理。审计日志会记录每次查询中哪些列被脱敏,这就给安全团队提供了具体可证明的依据。

示例

脱敏前后的行
// 来自 PostgreSQL 的原始行
{ "id": 1042, "email": "alice@example.com", "phone": "+14155550123", "status": "active" }

// 交付给 agent 的行(默认 L1–L3 访问范围)
{ "id": 1042, "email": "masked:v1:8f3a1c9b72e04d11", "phone": "masked:v1:b219ac74e1d908f2", "status": "active" }
仅 schema 的敏感度分级请求(不会发送任何行数据)
{
  "data_source": "prod-postgres",
  "table": "users",
  "fields": [
    { "name": "id",       "type": "bigint" },
    { "name": "email",    "type": "varchar(254)" },
    { "name": "phone",    "type": "varchar(20)" },
    { "name": "status",   "type": "varchar(16)" }
  ]
}

常见问题

默认会脱敏哪些字段?

L4(email、phone、salary、date_of_birth 等)与 L5(password、credit_card、api_secret、home_address)在到达 agent 前会被脱敏。L1–L3 以明文返回。可访问范围按 agent 可编辑。

脱敏值可逆吗?

没有本地密钥不可逆。脱敏是基于本地密钥的确定性 HMAC-SHA256;HMAC 密钥按(数据源、字段)派生自存储在操作系统级密钥库的本地密钥,永远不离开主机。同一安装内同一输入产生同一哈希值,但要逆向哈希值必须拥有本地密钥,而且 FutrixData 只取前 16 位哈希值,碰撞概率极低,基本不可逆。需要注意的一点是:低基数输入空间(布尔值、性别、按年的年龄、小型枚举)仍然易受枚举攻击 — 任何能通过网关提交已知输入的人,或持有本地密钥的人,都可以为这类字段构建查找表。Console(已授权人类)路径默认返回原始行;只有 agent 结果路径会被脱敏。请见 limitations — 确定性脱敏降低泄露面,并不能将数据集匿名化以供公开发布。

脱敏会破坏连接与聚合吗?

不会。同一输入产生同一脱敏输出,因此对脱敏列仍可进行连接、group by、count distinct 与等值判断。对脱敏字段会失去排序与子串操作 — 这些操作应在代理内部进行,而不是在 agent 侧。

能自定义敏感度等级吗?

可以。等级名称、描述、示例字段以及 agent 可访问的范围都可编辑。还可以新增按数据源或按表的覆盖 — 例如把 orders.notes 在生产中分为 L4,在 staging 副本中分为 L1。

GDPR 下哈希后的数据仍属于个人数据吗?

一般情况下是的。欧洲数据保护委员会将仍可通过附加信息关联回个人的假名化数据视为个人数据。脱敏属于"减小泄露面",不是合规的万能开关 — 但它在 GDPR 第 32 条下属于可论证的技术措施。

性能开销如何?

逐行脱敏是每个敏感字段一次基于本地密钥的 HMAC — 对常见行尺寸耗时不到 1 毫秒。多数查询的主要开销来自数据库本身和 LLM 往返,而不是脱敏。

FutrixData 会把 schema 元数据发送给 LLM 服务商吗?

在 AI Chat / schema 知识 / 表关系梳理的辅助等路径上可能会 — 这与查询结果行是分开的路径。schema 元数据可能包含表名、列名、类型、索引与注释。结果脱敏并不会自动覆盖 schema 元数据,因为 schema 本身就是需要被AI理解的结构,而不是数据。桌面应用为每个数据源都暴露了 schema 向 LLM 发送的开关,且每次发送都会被记录以便审计。如果 schema 本身蕴含商业机密(KYC 表、监管代码、内部产品名),请关闭对应数据源的开关。完整数据路径图请见 trust

脱敏会作用于桌面 Console 吗?

不会 — 这是设计如此。Console 是已授权人类查询的路径。键盘前的工程师就是检查者。脱敏作用于 agent 结果路径(MCP、Skill、agent CLI)。如果不想让某用户看到原始值,请在数据源本身做访问控制,而不是在 Console 端控制。

在你自己的数据库上试用 FutrixData

免费桌面应用支持 macOS、Windows、Linux。生产环境部署可选自托管 Enterprise Edition。