mcpField
L
ln-25-persistence-auditor

ln-25-persistence-auditor

github.com/levnikolaevich数据与数据库58457 次安装2 天前更新
代码仓库

关于 ln-25-persistence-auditor

这是一款只读审计技能,用于检查持久化和数据密集型运行路径,涵盖查询行为、事务正确性与资源生命周期。它要求结论有证据支撑,区分实测影响和静态疑虑,并给出基于风险的审计判定。

主要功能

  1. 01梳理数据存储和关键运行路径
  2. 02检查查询形态、缓存与事务边界
  3. 03追踪故障或取消时的资源清理
  4. 04在可用时采用运行时证据
  5. 05分类问题并报告审计结论

适用场景

  1. 01审计代码库中的数据库访问路径
  2. 02调查事务和一致性风险
  3. 03检查连接、流或会话的生命周期
  4. 04评估性能疑虑且不夸大证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/levnikolaevich/claude-code-skills --skill ln-25-persistence-auditor

安装后在 Claude Code 中输入/ln-25-persistence-auditor确认已加载。

详细介绍

持久化审计员

目标: 对持久化和数据密集型运行时路径进行只读审计。将静态候选项与实际查询、事务、资源或一致性机制关联起来;没有证据时,不要声称存在性能影响。

执行约定: 按顺序排列的复选框即为完成定义。请在内部将每项跟踪为 PENDING、附有具体证据的 PROVEN、附有条件不存在证据的 CLEARED,或存在缺口的 UNPROVEN;阅读、委派或工具故障都不能作为证明。每完成一节后,重新核对各项。返回前,解决所有 PENDING 项并仅统计 PROVEN 和 CLEARED 项;对每个缺口应用该技能的判定和批准规则。 保留用户意图、范围和现有授权。继续已获授权的工作;仅针对影响重大的未决选择或必需的外部批准进行询问。根据实质风险调整审查深度,不要悄然跳过检查。保留依赖关系和安全顺序;否则,针对每项要求选择合适的验证方法。

工具路由

需求首选工具适用场景备选方案
数据层映射使用原生文件搜索检查清单文件、模型、映射、存储库、迁移、查询、缓存、队列和连接池配置确定存储、框架、所有权和范围从已知的请求、作业或命令入口追踪
调用路径和资源所有权语言服务器或宿主环境原生代码智能工具追踪服务调用、事务边界、异步流程、会话范围和清理逻辑定向搜索,并直接检查定义和调用方
查询行为现有查询日志、跟踪、ORM 诊断和应用指标确定频率、重复情况、耗时、行数和缓存行为静态分析循环内查询和获取形态,并明确说明局限
查询计划在经批准的非生产目标上使用数据库原生 explain 工具可执行安全的只读查询,且具备有代表性的架构和数据静态检查索引、谓词、联接、统计信息假设和生成的 SQL
运行时性能现有分析器、基准测试或存储库诊断命令需要测量内存分配、阻塞、循环放大效应或 I/O 成本完成静态成本路径分析,并标注为未测量
正确性验证存储库定义的测试、集成环境和迁移检查安全地复现事务、重试、一致性或生命周期行为静态失败路径分析和所需验证计划
外部语义与已安装版本匹配的数据库、驱动程序、框架和运行时官方文档隔离、连接池、取消、缓存、触发器或异步语义会影响发现通过主要来源进行网络研究;否则标记为 UNVERIFIED

切勿连接生产环境或运行会产生变更的诊断操作。EXPLAIN ANALYZE 会执行语句:仅当已确认查询为只读,且目标为经批准的临时或非生产环境时才可使用。审计期间不要创建索引、执行迁移、清理、重写数据或更改连接池设置。

证据规则

  • 查询数量、耗时、行数、执行计划、锁或分析器证据,强于静态性能疑虑。
  • 如果完整路径清晰可见,静态证据可以证明正确性和生命周期缺陷;但性能影响必须标注为未测量。
  • ORM 惯例、有边界的管理路径、仅在启动时执行的工作,以及刻意保持较小的数据集,都需要结合上下文判断,之后才能列为发现。
  • 事务建议必须与实际使用的数据库、隔离级别、驱动程序、框架和重试模型相符。
  • 建议必须维护数据完整性和故障语义,而不只是降低延迟。

检查清单

1. 确定数据和运行时上下文
  • 检测范围内的数据库、ORM、驱动、缓存、队列、架构、迁移、连接池、依赖注入作用域和运行时入口点。
  • 根据仓库中的证据确定已安装的版本、数据库能力、部署拓扑、一致性要求和预期工作负载。
  • 识别关键数据路径、高流量路径、流式处理路径、计划任务,以及跨外部调用持有事务或资源的操作。
  • 在运行诊断或解读当前工作前,先阅读仓库说明并检查 Git 状态。
  • 确认可用的查询日志、指标、跟踪记录、性能分析、代表性数据、测试环境和安全的诊断权限。
  • 保持审计只读;记录已执行的查询形态、命令、目标和创建的产物,并对敏感参数、凭据和行数据进行脱敏。
2. 审计查询和缓存效率
  • 从入口点追踪代表性路径,直至生成查询并完成实例化;在租户/所有者谓词和行级控制决定可读取或更改的数据范围时,将其一并纳入。
  • 查找 N+1 行为、重复获取、循环内查询放大、彼此独立的读取操作不必要地顺序执行,以及冗余的存在性/计数查询;提出批处理或并行方案时,保留快照、排序、连接预算和事务约束。
  • 检查过度获取、宽泛的实体加载、无界读取、过早实例化、缺少分页,以及由用户控制的结果放大。
  • 检查缺少批量操作、逐行写入、可避免的往返、零散提交,以及基于集合处理的机会。
  • 结合架构和工作负载上下文,检查谓词、连接、排序和分组操作、索引匹配情况、查询计划假设及统计信息。
  • 检查缓存的归属、键设计、作用域、失效机制、缓存击穿控制、负缓存、允许的过期程度,以及缓存与数据库保障机制之间的重复。
  • 在建议修复前,区分延迟究竟由查询形态、连接等待、锁、网络、序列化、应用工作还是下游服务导致。
  • 衡量或明确标注预期影响;不要把候选索引或缓存说成已验证的优化。
3. 审计事务和一致性
  • 确定谁负责开始、提交、回滚、重试和释放各个事务,以及事务所有权是否与业务操作相符。
  • 检查相关写入的原子性、过早提交、缺少回滚、被吞掉的异常、嵌套事务行为和部分成功状态。
  • 查找持有时间过长的事务、事务内的网络或文件调用、持锁期间的用户交互,以及跨越不必要计算的事务。
  • 检查隔离级别假设、丢失更新、写偏斜、重复处理、乐观或悲观锁,以及重试安全性。
  • 在适用的情况下,验证幂等键、唯一约束、去重机制、outbox 或 inbox 行为,以及至少一次投递路径。
  • 检查触发器、通知、事件和订阅者的命名、提交时可见性、负载兼容性、顺序、重复投递和孤立消费者;如果增加中间提交会破坏业务原子性,不要仅为展示进度而增加中间提交。
  • 检查迁移和回填的事务行为、锁定时长、混合版本兼容性、可恢复执行能力和故障恢复。
  • 行为因版本而异时,依据已安装数据库、驱动和框架的官方语义核实建议。
4. 审计运行时和资源生命周期
  • 检查异步路径中的阻塞数据库、文件系统或网络 I/O,以及可能导致工作线程或事件循环资源耗尽的同步等待。
  • 检查数据密集型循环中的重复分配、复制、序列化、字符串构建、转换和集合扩容。
  • 跟踪会话、连接、游标、读取器、流、锁、订阅和临时文件在成功、错误、超时、取消及流式处理完成等情况下的生命周期。
  • 将消费者放弃和部分枚举纳入检查:生成器、异步迭代器、流式响应和客户端断开连接时,即使未正常完成,也必须释放资源。
  • 检查依赖注入作用域是否与资源生命周期匹配,尤其是单例访问作用域状态,以及请求资源被后台任务或流式任务持有的情况。
  • 对于后台任务、流式任务或其他生命周期较长的工作,验证资源所有权有界,并在需要时再获取资源,而不是保留生命周期较短的会话或连接;传递工厂或连接池是一种有效设计,但并非通用要求。
  • 检查连接池大小、超时、获取、验证、回收、泄漏迹象,以及跨副本、进程、工作线程和故障转移容量的总连接预算,而不仅是单个进程的设置。
  • 检查取消传播、命令超时、重试风暴、熔断器行为,以及重试之间和放弃任务后的清理。
  • 检查 ORM 过期、延迟加载、脱离会话的实体和隐式自动刷新,确保查询或写入不会在预期的会话或事务生命周期之外发生。
  • 在可用时使用运行时测量,区分热点路径和低频或有界代码,然后再评定性能问题的严重程度。
5. 验证发现并报告
  • 尽可能通过安全测试或完整故障轨迹复现高严重性正确性缺陷,并通过查询、执行计划、锁或性能分析证据验证性能缺陷。
  • 确认发现之前,先排除由框架管理的生命周期、有界维护任务、测试夹具、为保留历史而留存的迁移,以及已记录的权衡。
  • 对共享同一根因查询、事务边界、作用域不匹配或连接池配置的问题症状去重。
  • 执行实质性影响门槛:在有证据支持的规模下,要求存在具体的数据完整性、安全性、可用性、延迟、可扩展性、资源或重复维护影响。排除品味、理论上的纯粹性、泛泛的实践、假设性的规模问题和合理替代方案;要求说明结果或约束,而非偏好的实现方式。
  • 外部修正应以匹配版本的官方契约为依据;对于尚未解决的权衡,应采用一手工程资料。引用有依据的机制;本地缺陷可由本地证据佐证。
  • 根据数据损坏、安全性、宕机风险、可扩展性、延迟、资源耗尽和复发情况,将发现分类为 P0-P3。
  • 当无法通过可信的备用方案验证关键数据路径、数据库语义或必需的非生产环境时,使用 BLOCKED;对于有证据表明尚未解决的数据损坏、原子性、宕机、资源耗尽风险、必需门禁失败或其他 P0/P1 问题,使用 FAIL;仅在存在有证据支持的非阻塞风险或实质性未测量不确定性时使用 CONCERNS;只有在关键路径可信且不存在实质性问题时才使用 PASS。

自检

  • 返回前核对。 检查各项证据、需求覆盖情况、矛盾、范围、结论和适用的清理工作。修正报告或已授权的产物。复用有效证据;不要自动重新扫描代码库或重新运行已成功的命令。仅在存在相关变更、失败或未解决证据时重复检查。说明仍未解决的问题。

输出约定

按以下顺序以用户使用的语言报告;保留全部五个字段,并且每项事实只陈述一次。少量结果可以每个字段占一行;省略空表格,不要复制已链接的产物:

  1. **结果:**针对技能的判定及有依据支持的结果。
  2. **范围:**已审查/更改的范围、排除项、基线和重要假设。
  3. **证据:**以下针对技能的字段;区分事实、推断和未经验证的声明。链接相关产物;适用时使用表格。
  4. **验证:**检查及结果、无法获取的证据,以及适用的清理/外部状态。
  5. 完成情况:Checklist: X/Y complete;Incomplete: None,或逐项列出每个 UNPROVEN 项的原因、对结果的影响及确切的后续操作;残余风险和所需决策。

**针对技能的证据:**存储、版本、工作负载、部署,以及经测量与仅静态检查的路径;查询/缓存效率、事务、一致性和资源生命周期。发现项必须说明优先级、调用路径/查询/资源、证据和置信度、故障或成本机制、工作负载影响、不可接受的权衡,以及最小安全修正方案和验证方法。标注未经测量的影响及已接受的一致性权衡。

评论

支持 Markdown