返回正文目录

第十三章实操:模型、字段、行与成员范围

2026-10-21。正文:让 AI 只查询用户可见的数据。当前 Codex 会话实际调用公开 CLI 完成验证;本章初稿、自审完成,待用户审阅,第十四章未开始。

环境与文件

实际步骤

  1. 启动独立 Runtime,等待就绪,记录 capabilities。登记原件副本、绑定 Namespace、连接测试;通过 tables inspect 核对 InvoiceLine、Invoice、Customer、Track、Album、Artist。
  2. 启动本地权限服务,生成两个模型文件。模型校验 2/2 通过,登记 chinook-scope-demo Bundle,再刷新。
  3. 对美国、加拿大、拒绝、匿名身份分别 list/describe;前两者能发现受限模型且读不到单价元数据,后两者列表隐藏、直接 describe 拒绝。
  4. 两身份用相同 DSL 查询 2012 年金额,顺序为美国 → 加拿大 → 美国。逐次核对结果,并检查身份切换未串用结果。
  5. 验证未授权/匿名查询校验拒绝、detailPrice/旧 unitPrice 查询校验拒绝。所有被拒绝的查询都跳过 execute。
  6. 各身份做客户完整排名、前两页和请求另一国家的排名;金额、客户集合、分页与 total 都与原始表独立核算一致,越范围条件与权限相交后为空。
  7. 按 billId 查询账单成员,核对总数及返回页。艺术家成员不能承载账单国家谓词时,按预期拒绝。
  8. 模拟权限服务返回 503,查询校验拒绝;恢复服务并移除本章 Bundle,关闭权限服务和隔离 Runtime,确认端口释放。完整复跑入口另做冷启动验证。

结果与独立基线

检查 美国身份 加拿大身份
2012 年明细金额 127.98 42.57
2012 年明细条数 102 43
2012 年成交客户数 13 4
全期间有权访问的账单目录 total 91 56

基线从不可变原件副本只读读取 Invoice/InvoiceLine,以主键映射关联、Python Decimal 乘数量并累计;没有复用引擎生成的 JOIN SQL。目录 total 不施加 2012 年业务筛选,成员接口只核对本次返回的十条及 total,不声称遍历所有页。

逻辑查询用例共 11 项正确执行、5 项预期校验拒绝;模型列表/说明和成员检查另计。首次分步实操及完整复跑使用同一组逻辑用例,不相加为独立测试总数。

关键诊断:

情况 实际结果
未授权/匿名 describe MODEL_ACCESS_DENIED,phase models.describe
未授权/匿名 query validate QUERY_VALIDATE_FAILED,提示当前模型操作不可用
选择 detailPrice QUERY_VALIDATE_FAILED,当前字段不可访问
改用旧 unitPrice FIELD_NOT_FOUND
美国身份筛选 Canada 排名 合法请求,权限与业务筛选相交,返回空列表
billId 成员目录 对应账单国家过滤成功,ID 均属于允许集合
albumArtistId 成员目录 MODEL_PERMISSION_RESOLUTION_FAILED,phase members.list,safeToAutoRepair=false
权限服务不可用 查询校验失败,未继续执行或改用公开模型

Artist 目录的拒绝符合 0.1.30 成员绑定合同:行谓词须映射到实际目标,无法安全映射时拒绝。账单国家不直接等于艺术家的某个属性,不能为了返回候选而去掉这条权限。

复跑

在本资料目录执行:

.\lab\checks\run-chapter-13.ps1

这是完整自动化验收入口,包含创建与全部查询,不对应正文“先不查询”的单步提示词。它检查 18068/18070 空闲,使用原发行脚本启动隔离实例,调用 检查脚本,最后停止自己启动的 Runtime。演示权限服务与身份值仅在检查进程内有效,不能把留存模型当作无需权限服务的常驻产品接入。

正文按创建、读取元数据、查询、边界检查分步讲解;复跑脚本用于独立核对完整结果。配套脚本只实现最小演示 provider,不是登录系统、角色后台或生产 IAM。

证据与边界

证据目录 内:

模型、描述、校验、正常 execute 和成员调用的实际行为已记录。未把已拒绝请求直接送到 execute 做对抗测试,未测试 Authorization 伪造、过期/撤销、所有缓存层、跨数据库或生产治理;不能将本章标成完整安全审计。隐藏单价仅表示这个字段入口受限,不声称已验证防止通过其他授权数据间接推算。

Runtime 的开发管理模式仍是 none-dev-test-only。真实业务用户不应获得模型发布、原始 SQL 或其他管理能力;身份真实性及管理接口隔离由接入方负责,不触碰 TMS 的权限配置。本轮没有改产品源码、生产部署、FAP、已暂缓的 Text-to-SQL 对比,也没有新增 GitHub issue/comment。