review-sql
技能(Skill):审查 SQL
目的 (Purpose)
仅查看 SQL 和查询相关代码的 语言和查询约定。涵盖注入和参数化、索引和执行计划问题、事务和隔离、NULL 和唯一约束、方言可移植性、大表和分页模式以及敏感列和权限。以标准格式发出结果列表以进行聚合。不定义范围或执行全面的安全/架构审查;注入在这里是一个特定于 SQL 的问题,但更广泛的安全性是针对 review-security。
核心目标(Core Objective)
首要目标:生成以 SQL 为中心的 findings 列表,涵盖注入/参数化、索引、事务、NULL/约束、方言可移植性、分页模式及敏感列访问,针对给定代码范围。
成功标准(必须满足所有要求):
- ✅ 仅限 SQL 范围:仅审查 SQL 和查询约定;未执行范围选择、完全安全性或架构分析
- ✅ 涵盖所有七个 SQL 维度:注入/参数化、索引/执行计划、事务/隔离、NULL/唯一约束、方言/可移植性、大表/分页模式以及相关的敏感列/权限
- ✅ 结果格式兼容:每个结果包括位置、类别(
language-sql)、严重性、标题、描述和可选建议 - ✅ 已标记关键注入问题:SQL 注入模式(字符串连接、用户输入插值)被标记为“严重”严重性
- ✅ 位置精确引用:所有结果都引用特定文件:行或查询标识符位置
验收测试:输出是否包含涵盖所有相关查询维度的 SQL 结果列表,其中注入风险标记为“关键”以及每个结果的具体位置引用?
范围边界(范围边界)
本技能负责:
- 通过字符串连接或插值进行 SQL 注入 — 参数化查询和准备好的语句
- WHERE/JOIN/ORDER BY 列的索引间隙
- 事务边界、隔离级别、死锁风险、长时间运行的事务
- 比较/聚合中的 NULL 处理、唯一约束、NOT NULL 正确性
- 数据库方言可移植性(LIMIT/OFFSET/FETCH、日期函数、供应商特定语法)
- 大表全扫描、分页策略(keyset vs OFFSET)
- SELECT 中的敏感列暴露、最低权限角色使用
本技能不负责:
- 范围选择——范围由调用者提供
- 更广泛的安全分析(超越 SQL 注入)——使用“review-security”
- 架构分析——使用“review-architecture”
- 全面精心策划的审核——使用“审核代码”
转交点:当所有 SQL 结果发出后,将其交给 review-code 进行聚合。对于更广泛的安全问题(身份验证、加密、配置),请重定向到“审查安全”。
使用场景(用例)
- 精心安排的审阅:当 review-code 为包含 SQL(.sql 文件、嵌入式 SQL 或 ORM 生成的 SQL)的项目运行时用作语言步骤。
- 仅 SQL 审查:当用户只想检查查询的正确性、性能和安全性时。
- 迁移或可移植性:检查特定方言的构造和跨数据库的可移植性。
何时使用:当正在审查的代码包含 SQL(原始 .sql、嵌入代码或 ORM 生成)时。范围(差异与路径)由调用者或用户确定。
行为(行为)
该技能的范围
- 分析:给定范围(文件、片段或差异)中的 SQL 和查询逻辑。接受 .sql 文件、应用程序代码中的嵌入式 SQL 或 ORM 生成的 SQL(如果可见)。
- 不要:决定范围(差异与代码库);不执行完整的应用程序安全或架构审查。关注 SQL/查询维度。
查看清单(仅限 SQL 维度)
- 注入和参数化:SQL中用户输入无需字符串串联或插值;使用参数化查询或准备好的语句;避免来自不可信输入的动态 SQL。
- 索引和执行计划:对未索引列进行过滤或联接的查询;在大表上选择*;缺少 WHERE/JOIN/ORDER BY 的索引。
- 事务和隔离:适当的事务边界;隔离级别和锁定;避免长时间运行的事务;僵局风险。
- NULL和唯一约束:比较和聚合中NULL的处理;独特的约束和重复的处理;在适当的情况下 NOT NULL。
- 方言和可移植性:特定于数据库的语法(例如 LIMIT 与 OFFSET/FETCH、日期函数)和可移植性(如果需要多数据库支持)。
- 大表和分页:对大表进行全量扫描;分页(键集与 OFFSET)和可扩展性。
- 敏感列和权限:SELECT中的敏感数据; SQL 中的最低权限和角色使用(如果可见)。
语气和参考
- 专业和技术:参考特定位置(文件:行或查询标识符)。发出包含位置、类别、严重性、标题、描述、建议的结果。
输入与输出 (Input & Output)
输入(输入)
- 代码范围:包含 SQL 的文件或片段(例如 .sql 文件、带有嵌入式 SQL 的代码或 ORM 生成的 SQL(如果可用))。由用户或范围技能提供。
输出(输出)
- 以附录:输出合同中定义的格式发出零个或多个结果。
- 此技能的类别是语言-sql。
限制(限制)
硬边界(Hard Boundaries)
- 不要执行范围选择或全面的安全/架构审查。遵守 SQL 和查询约定。
- 不要在没有具体地点或可行建议的情况下给出结论。
- 不要假设特定的数据库供应商,除非另有说明;相关时请注意方言。
技能边界 (Skill Boundaries)
不要做这些(其他技能可以处理它们):
- 不要选择或定义代码范围 - 范围由调用者或“审查代码”确定
- 不要执行 SQL 注入之外的广泛安全分析 - 使用“review-security”
- 不要执行架构分析——使用“review-architecture”
- 不要审查非 SQL 代码的 SQL 约定(应用程序代码中的 SQL 注入应由“审查安全”标记)
何时停止并交接:
- 当所有 SQL 结果发出后,将其交给“review-code”进行聚合
- 当用户需要更广泛的安全分析(身份验证、加密、配置)时,重定向到“审查安全”
- 当用户需要全面审查(范围+语言+cognitive)时,重定向到“审查代码”
自检(Self-Check)
核心成功标准
- 仅 SQL 范围:仅审查 SQL 和查询约定;未执行范围选择、完全安全性或架构分析
- 涵盖所有七个 SQL 维度:注入/参数化、索引/执行计划、事务/隔离、NULL/唯一约束、方言/可移植性、大表/分页模式以及相关的敏感列/权限
- 结果格式兼容:每个结果包括位置、类别(
语言-sql)、严重性、标题、描述和可选建议 - 已标记关键注入问题:SQL 注入模式(字符串连接、用户输入插值)被标记为“严重”严重性
- 位置精确引用:所有结果都引用特定文件:行或查询标识符位置
流程质量检查
- 是否仅审查了 SQL/查询维度(没有超出查询设计的范围/架构)?
- 是否涵盖相关的参数化、索引、事务、NULL/约束和可移植性?
- 每个发现是否都包含位置、类别=语言-sql、严重性、标题、描述和可选建议?
- 问题是否通过 file:line 或查询标识符引用?
验收测试
输出是否包含涵盖所有相关查询维度的 SQL 结果列表,其中注入风险标记为“关键”以及每个结果的具体位置引用?
示例(示例)
示例 1:查询中的字符串连接
- 输入:使用字符串连接(包括用户输入)构建的查询。
- 预期:发出 SQL 注入的关键发现;建议参数化查询或准备好的语句。类别=语言-sql。
示例 2:没有分页的大表
- 输入:SELECT * FROM large_table ORDER BY id,没有 LIMIT 或分页。
- 预期:发出性能和可扩展性的结果;建议分页(例如键集或 OFFSET/FETCH),并在不需要时避免使用 SELECT *。类别=语言-sql。
边缘情况:ORM 生成的 SQL
- 输入:仅使用 ORM 的应用程序代码;生成的 SQL 不可见。
- 预期:检查代码中的任何原始 SQL 或查询构建器;如果没有可见的 SQL,请说明并跳过或报告“范围内没有要审查的 SQL”。不要发明 SQL。
附录:输出合约
每项调查结果必须遵循标准调查结果格式:
| 元素 | 要求 |
|---|---|
| 位置 | path/to/file.ext(可选行或范围)或查询标识符。 |
| 类别 | 语言-sql。 |
| 严重性 | 关键 | 主要 | 次要 | 建议。 |
| 标题 | 简短的一行摘要。 |
| 描述 | 1-3 句话。 |
| 建议 | 具体修复或改进(可选)。 |
示例:
- **Location**: `scripts/orders.sql:12`
- **Category**: language-sql
- **Severity**: critical
- **Title**: Query built with string concatenation; injection risk
- **Description**: User-controlled input is concatenated into the WHERE clause.
- **Suggestion**: Use parameterized query or prepared statement with placeholders.
More from nesnilnehc/ai-cortex
review-codebase
Architecture and design review for specified files/dirs/repo. Covers tech debt, patterns, quality. Diff-only review use review-diff. Complements review-code (orchestrated).
101review-vue
Review Vue 3 code for Composition API, reactivity, components, state (Pinia), routing, and performance. Framework-only atomic skill; output is a findings list.
88review-diff
Review only git diff for impact, regression, correctness, compatibility, and side effects. Scope-only atomic skill; output is a findings list for aggregation.
88review-java
Review Java code for language and runtime conventions: concurrency, exceptions, try-with-resources, API versioning, collections and Streams, NIO, and testability. Language-only atomic skill; output is a findings list.
80review-architecture
Review code for architecture: module and layer boundaries, dependency direction, single responsibility, cyclic dependencies, interface stability, and coupling. Cognitive-only atomic skill; output is a findings list.
78review-code
Orchestrate comprehensive code reviews by running scope, language, framework, library, and cognitive review skills in sequence, then aggregate findings into a unified report.
71