最小权限原则
最小权限是给模型和这一次会话刚刚够用的权限:只需要读就不给写,只需要本租户数据就不给全库,凭据不进上下文而是在服务端注入。注入防护永远做不到滴水不漏,但因为权限面决定了一次事故的最大损失,把权限收窄是性价比最高的一层防护。
基本信息
| 核心 | 权限面 = 出事时可能损失的上限 |
|---|---|
| 工具 | 按任务发放,用不到的工具不注册 |
| 数据 | 按租户/项目过滤,不改动超范围记录 |
| 凭据 | 短期凭证由服务端注入,长期密钥不进提示 |
| 回收 | 会话结束即失效临时权限 |
典型使用场景
- 客服助手:只读订单字段,退款动作走人工审批
- 数据分析代理:只挂载本部门数据视图,不给底层库权限
- 代码助手:在沙箱内执行,不挂载生产凭据
- 内部搜索:按用户身份过滤可检索范围
- 定时批处理:每次运行申请短期令牌,不落盘保存
权限核对清单
权限核对清单
# 上线前逐项确认
□ 工具列表最小化:能不用工具的任务不注册工具
□ 数据范围最小化:查询条件固定带 tenant_id
□ 凭据不进上下文:服务端注入 + 短期有效期
□ 写操作单独审批,读操作按范围放行
□ 会话结束回收临时权限与缓存
□ 记录每次调用的身份、范围与实际影响行数权限放大因素对照
| 权限面 | 常见放大因素 | 收敛做法 |
|---|---|---|
| 工具 | 一次性接入平台全部接口 | 按任务注册白名单工具 |
| 数据 | 复用共享高权限服务账号 | 按租户/项目拆分账号与视图 |
| 凭据 | 长期密钥写进系统提示 | 短期凭证 + 服务端注入 |
| 写操作 | 与读操作共用同一通道 | 写操作单独审批与留痕 |
| 会话 | 权限长期有效不回收 | 会话级临时授权,过期即失效 |
给代理复用高权限服务账号是最常见的放大器:一次成功的注入就能读遍或改动大量数据,而且日志里所有操作都指向同一个账号,事后难以区分正常业务与异常行为。
凭据为什么不能进上下文:模型能看到的内容就存在被输出或外带的风险,包含在提示里的密钥会覆盖该提示的所有会话,泄露面与提示的复用次数成正比。