mcpField
R
review-sql

review-sql

github.com/nesnilnehcTesting & quality873 installsUpdated 1d ago
Repository

About review-sql

A review skill for SQL and query code, usable in a code review workflow or for focused query checks. It examines parameterization, indexes, transactions, NULL handling, dialects, and pagination, with findings tied to specific locations.

Key features

  1. 01Checks injection risks and parameterized queries
  2. 02Assesses indexes and execution-plan concerns
  3. 03Reviews transaction boundaries and isolation
  4. 04Checks NULL handling and unique constraints
  5. 05Assesses dialect compatibility and pagination
  6. 06Reviews sensitive-column access and permissions

Use cases

  1. 01Review raw SQL or embedded queries
  2. 02Check query correctness, performance, and security
  3. 03Verify database dialect compatibility in migrations

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/nesnilnehc/ai-cortex --skill review-sql

After installing, type/review-sqlin Claude Code to confirm it loaded.

Bundled filesREADME.md

Details

From the project README

技能(Skill):审查 SQL

目的 (Purpose)

仅查看 SQL 和查询相关代码的 语言和查询约定。涵盖注入和参数化、索引和执行计划问题、事务和隔离、NULL 和唯一约束、方言可移植性、大表和分页模式以及敏感列和权限。以标准格式发出结果列表以进行聚合。不定义范围或执行全面的安全/架构审查;注入在这里是一个特定于 SQL 的问题,但更广泛的安全性是针对 review-security。


核心目标(Core Objective)

首要目标:生成以 SQL 为中心的 findings 列表,涵盖注入/参数化、索引、事务、NULL/约束、方言可移植性、分页模式及敏感列访问,针对给定代码范围。

成功标准(必须满足所有要求):

  1. ✅ 仅限 SQL 范围:仅审查 SQL 和查询约定;未执行范围选择、完全安全性或架构分析
  2. ✅ 涵盖所有七个 SQL 维度:注入/参数化、索引/执行计划、事务/隔离、NULL/唯一约束、方言/可移植性、大表/分页模式以及相关的敏感列/权限
  3. ✅ 结果格式兼容:每个结果包括位置、类别(language-sql)、严重性、标题、描述和可选建议
  4. ✅ 已标记关键注入问题:SQL 注入模式(字符串连接、用户输入插值)被标记为“严重”严重性
  5. ✅ 位置精确引用:所有结果都引用特定文件:行或查询标识符位置

验收测试:输出是否包含涵盖所有相关查询维度的 SQL 结果列表,其中注入风险标记为“关键”以及每个结果的具体位置引用?


范围边界(范围边界)

本技能负责:

  • 通过字符串连接或插值进行 SQL 注入 — 参数化查询和准备好的语句
  • WHERE/JOIN/ORDER BY 列的索引间隙
  • 事务边界、隔离级别、死锁风险、长时间运行的事务
  • 比较/聚合中的 NULL 处理、唯一约束、NOT NULL 正确性
  • 数据库方言可移植性(LIMIT/OFFSET/FETCH、日期函数、供应商特定语法)
  • 大表全扫描、分页策略(keyset vs OFFSET)
  • SELECT 中的敏感列暴露、最低权限角色使用

本技能不负责:

  • 范围选择——范围由调用者提供
  • 更广泛的安全分析(超越 SQL 注入)——使用“review-security”
  • 架构分析——使用“review-architecture”
  • 完整编排式审查——使用“审查代码”

转交点:当所有 SQL 结果发出后,将其交给 orchestrate-code-review 进行聚合。对于更广泛的安全问题(身份验证、加密、配置),请重定向到“审查安全”。


使用场景(用例)

  • 精心安排的审阅:当 orchestrate-code-review 为包含 SQL(.sql 文件、嵌入式 SQL 或 ORM 生成的 SQL)的项目运行时用作语言步骤。
  • 仅 SQL 审查:当用户只想检查查询的正确性、性能和安全性时。
  • 迁移或可移植性:检查特定方言的构造和跨数据库的可移植性。

何时使用:当正在审查的代码包含 SQL(原始 .sql、嵌入代码或 ORM 生成)时。范围(差异与路径)由调用者或用户确定。


行为(行为)

该技能的范围
  • 分析:给定范围(文件、片段或差异)中的 SQL 和查询逻辑。接受 .sql 文件、应用程序代码中的嵌入式 SQL 或 ORM 生成的 SQL(如果可见)。
  • 不要:决定范围(差异与代码库);不执行完整的应用程序安全或架构审查。关注 SQL/查询维度。
查看清单(仅限 SQL 维度)
  1. 注入和参数化:SQL中用户输入无需字符串串联或插值;使用参数化查询或准备好的语句;避免来自不可信输入的动态 SQL。
  2. 索引和执行计划:对未索引列进行过滤或联接的查询;在大表上选择*;缺少 WHERE/JOIN/ORDER BY 的索引。
  3. 事务和隔离:适当的事务边界;隔离级别和锁定;避免长时间运行的事务;僵局风险。
  4. NULL和唯一约束:比较和聚合中NULL的处理;独特的约束和重复的处理;在适当的情况下 NOT NULL。
  5. 方言和可移植性:特定于数据库的语法(例如 LIMIT 与 OFFSET/FETCH、日期函数)和可移植性(如果需要多数据库支持)。
  6. 大表和分页:对大表进行全量扫描;分页(键集与 OFFSET)和可扩展性。
  7. 敏感列和权限:SELECT中的敏感数据; SQL 中的最低权限和角色使用(如果可见)。
语气和参考
  • 专业和技术:参考特定位置(文件:行或查询标识符)。发出包含位置、类别、严重性、标题、描述、建议的结果。

输入与输出 (Input & Output)

输入(输入)
  • 代码范围:包含 SQL 的文件或片段(例如 .sql 文件、带有嵌入式 SQL 的代码或 ORM 生成的 SQL(如果可用))。由用户或范围技能提供。
输出(输出)
  • 以附录:输出合同中定义的格式发出零个或多个结果。
  • 此技能的类别是language-sql。

限制(限制)

硬边界(Hard Boundaries)
  • 不要执行范围选择或全面的安全/架构审查。遵守 SQL 和查询约定。
  • 不要在没有具体地点或可行建议的情况下给出结论。
  • 不要假设特定的数据库供应商,除非另有说明;相关时请注意方言。
技能边界 (Skill Boundaries)

不要做这些(其他技能可以处理它们):

  • 不要选择或定义代码范围 - 范围由调用者或“审查代码”确定
  • 不要执行 SQL 注入之外的广泛安全分析 - 使用“review-security”
  • 不要执行架构分析——使用“review-architecture”
  • 不要审查非 SQL 代码的 SQL 约定(应用程序代码中的 SQL 注入应由“审查安全”标记)

何时停止并交接:

  • 当所有 SQL 结果发出后,将其交给“orchestrate-code-review”进行聚合
  • 当用户需要更广泛的安全分析(身份验证、加密、配置)时,重定向到“审查安全”
  • 当用户需要全面审查(范围+语言+cognitive)时,重定向到“审查代码”

自检(Self-Check)

核心成功标准
  • 仅 SQL 范围:仅审查 SQL 和查询约定;未执行范围选择、完全安全性或架构分析
  • 涵盖所有七个 SQL 维度:注入/参数化、索引/执行计划、事务/隔离、NULL/唯一约束、方言/可移植性、大表/分页模式以及相关的敏感列/权限
  • 结果格式兼容:每个结果包括位置、类别(language-sql)、严重性、标题、描述和可选建议
  • 已标记关键注入问题:SQL 注入模式(字符串连接、用户输入插值)被标记为“严重”严重性
  • 位置精确引用:所有结果都引用特定文件:行或查询标识符位置
流程质量检查
  • 是否仅审查了 SQL/查询维度(没有超出查询设计的范围/架构)?
  • 是否涵盖相关的参数化、索引、事务、NULL/约束和可移植性?
  • 每个发现是否都包含位置、类别=language-sql、严重性、标题、描述和可选建议?
  • 问题是否通过 file:line 或查询标识符引用?
验收测试

输出是否包含涵盖所有相关查询维度的 SQL 结果列表,其中注入风险标记为“关键”以及每个结果的具体位置引用?


示例(示例)

示例 1:查询中的字符串连接
  • 输入:使用字符串连接(包括用户输入)构建的查询。
  • 预期:发出 SQL 注入的关键发现;建议参数化查询或准备好的语句。类别=language-sql。
示例 2:没有分页的大表
  • 输入:SELECT * FROM large_table ORDER BY id,没有 LIMIT 或分页。
  • 预期:发出性能和可扩展性的结果;建议分页(例如键集或 OFFSET/FETCH),并在不需要时避免使用 SELECT *。类别=language-sql。
边缘情况:ORM 生成的 SQL
  • 输入:仅使用 ORM 的应用程序代码;生成的 SQL 不可见。
  • 预期:检查代码中的任何原始 SQL 或查询构建器;如果没有可见的 SQL,请说明并跳过或报告“范围内没有要审查的 SQL”。不要发明 SQL。

Comments

Markdown supported