V4|企业级安全问数 1.0
状态:待开发。全部任务默认未完成;本文件是勾选状态的唯一来源。 依据:原始总纲第 39 节;以下故事、编号、接口与验收细则为本次实施设计。
阶段目标
把业务理解、查询计划、安全执行和结果验证组成可治理的生产候选系统。
- 进入条件:V3 稳定语义与回归集;安全基线一直保留。
- 规模 / 质量约束:完成 Enterprise NL2SQL 1.0 的验收与面试主线;“生产候选”仍需目标环境容量和安全验收。
- 阶段依赖:V0 → V1 → V2 → V3 → V4 → V5 → V6。故事内任务按编号顺序执行,故事间按下列依赖执行。
- 建议路径均为规划位置,尚未存在;实现时允许简化文件拆分,但必须更新学习站真实代码索引。
- 完成标准:本期任务全部满足 通用 DoD,证据登记到 验收记录。
V4-S01|查询计划与 IR
用户故事:作为业务用户希望同比、多指标与排名在生成 SQL 前有可检查的计算计划。
依赖:V3-S06。
建议落点:server/planner、server/generation。
学习目标:IR、类型校验、指标依赖与方言解耦。
开发任务
- V4-S01-T01 定义版本化 IR:指标、维度、类型化过滤、时间区间、比较、聚合、Join Path、排序、limit、预聚合与来源版本。
- V4-S01-T02 从 QueryIntent + Linking + SemanticContext 构建 QueryPlan,检查维度兼容、缺失槽位、时间窗口及多事实粒度。
- V4-S01-T03 生成器消费已验证 IR;加入同比去年为零/空、不同日期角色和多指标过滤的 Gold 场景。
验收场景
不合法指标/维度组合在生成前失败;“先按城市聚合再筛同比”不会变成错误的明细 WHERE;IR 可独立重放与评测。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
V4-S02|统一身份与全链路授权
用户故事:作为管理员希望区域与门店数据权限贯穿检索、缓存、SQL 和数据库。
依赖:V4-S01。
建议落点:server/auth、server/policy、server/search、apps/admin。
学习目标:RBAC、ABAC、默认拒绝、纵深防御。
开发任务
- V4-S02-T01 定义用户、角色、资源和属性策略;建立 CEO、区域经理、门店经理、财务、销售授权夹具与管理页面。
- V4-S02-T02 服务端从可信会话构造 AuthorizationContext,禁止信任请求自报角色;授权过滤检索、语义、样例和列。
- V4-S02-T03 对 SQL 中 CTE、子查询、别名、UNION 进行表列血缘检查和行范围约束;复杂重写无法证明安全时拒绝。
- V4-S02-T04 部署数据库只读权限与适用的 RLS/视图;缓存、会话、结果、Trace 和导出使用授权指纹隔离并在撤权后失效。
验收场景
华东用户不能通过子查询或缓存看到华南;销售不能从表达式/排序间接读取成本列;数据库连接身份与应用授权可对账。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
V4-S03|AST 完整校验与资源治理
用户故事:作为平台运维希望阻断危险 SQL 与高成本查询,保障共享数据库。
依赖:V4-S02。
建议落点:server/validation、server/execution、server/policy。
学习目标:AST 血缘、成本估算、限流和取消。
开发任务
- V4-S03-T01 扩展单语句、只读、对象与函数允许规则,覆盖嵌套 CTE、星号展开、笛卡尔积、SELECT INTO 和危险函数。
- V4-S03-T02 在验证后执行普通 EXPLAIN 而非 EXPLAIN ANALYZE,解析计划估算并配置成本阈值;估算失败按策略拒绝。
- V4-S03-T03 实现语句超时、并发配额、最大行数、结果字节数、请求取消与速率限制;注明估算 cost 不等于准确扫描量。
- V4-S03-T04 建立恶意 SQL 与压力测试集合,记录拦截原因、超时释放和连接池恢复;限制测试规模与目标环境。
验收场景
LIMIT 不能使高成本 Join 自动通过;被拒 SQL 不执行;取消后后端数据库查询终止,连接可重用。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
V4-S04|有边界的 SQL 修复
用户故事:作为业务用户希望可恢复错误自动纠正,但不能用修复绕过安全策略。
依赖:V4-S03。
建议落点:server/repair、server/orchestrator、server/llm。
学习目标:错误分类、有限重试、共享预算。
开发任务
- V4-S04-T01 将错误分类为 Syntax/Schema/Type/Function/Timeout/Permission/Cost/Security,定义可修复类别与用户文案。
- V4-S04-T02 实现最多 2 次修复的状态机,使用脱敏错误、原始意图、IR 和 schema;保留每个候选与累计预算。
- V4-S04-T03 修复后的 SQL 重新经过 AST、Policy、EXPLAIN 与执行;PermissionError / SecurityViolation 直接终止,成本和超时不盲目重试。
验收场景
连续失败恰好在上限结束;安全拒绝零次调用修复模型;SQL v2 不能跳过授权重新执行。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
V4-S05|结果验证、澄清与证据化解释
用户故事:作为用户希望区分有效答案、无数据、异常结果与需要补充信息。
依赖:V4-S04。
建议落点:server/validation/result、server/generation/answer、apps/web。
学习目标:可执行不等于正确、异常不等于错误、证据边界。
开发任务
- V4-S05-T01 验证空结果、NULL、异常值、重复放大、聚合粒度、强制规则与时间范围,区分 error/warning/valid。
- V4-S05-T02 实现 High 执行、Medium 补充检索、Low 澄清的可配置策略,并记录阈值来源与校准结果。
- V4-S05-T03 使回答与 SQL、IR、指标版本和结果单元格关联;实现 Table/Bar/Line/Pie/KPI/Ranking 选择与类型检查。
- V4-S05-T04 用户端展示澄清选项、限制、截断和异常提示;图表空数据和错误数据不生成误导可视化。
验收场景
去年为零的同比展示未定义及原因;疑似重复金额不能直接被摘要断言为增长;低置信度不会执行猜测 SQL。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
V4-S06|审计、可观测与部署验收
用户故事:作为运维与面试者希望追溯每次查询,并有可执行的生产候选验收说明。
依赖:V4-S05。
建议落点:server/observability、deploy、apps/admin、altassql-book/stages。
学习目标:审计与 Trace 区别、SLO、备份恢复、故障演练。
开发任务
- V4-S06-T01 接入 OpenTelemetry、Prometheus、Grafana 与 Langfuse,关联 request/trace/query ID;日志与模型观测脱敏并控制访问。
- V4-S06-T02 管理端补齐权限、审计、Trace 查询和错误定位;制定审计保留、删除及访问规则。
- V4-S06-T03 编写 Kubernetes 部署、迁移顺序、健康检查、密钥配置、备份恢复、回滚与依赖失效运行手册。
- V4-S06-T04 在已注明环境运行功能、安全、并发、超时和恢复验收,设置有实测依据的延迟/容量预算并形成 V4 报告。
- V4-S06-T05 更新企业级架构及面试材料,引用真实代码、失败案例和实测;保留未通过项并禁止宣称已具备未经验证的生产 SLA。
验收场景
任意一次拒绝可追溯策略版本与原因;备份恢复实际执行有记录;锁定安全测试集越权放行数必须为 0,否则不能发布。
完成后应提供:相关测试或演示命令、实际结果、真实代码入口和一段“为什么这样做”的说明。仅创建文件不满足验收。
阶段演示与复盘
- 从本期故事选一条完整用户流程,按输入 → 中间产物 → 输出演示。
- 演示上述验收中的一个失败/拒绝场景,解释负责处理的模块。
- 固定环境和数据版本,提交本期验收报告;未达到的目标登记阻塞原因。
- 在学习站
stages/v4.md补充已实现代码入口、调用关系、实测结果及面试复述。 - 复查本期 6 个用户故事、23 个开发任务的证据,再由执行者勾选。
复盘问题:本期解决了上一期哪类具体失败?增加了什么复杂度?有什么证据证明收益?下一期需要解决什么剩余问题?