mcpField
M
MySQL Audit

MySQL Audit

本地服务
github.com/jimmyjan0824数据库01 天前更新

关于 MySQL Audit

MySQL Audit 是面向 AI 编码 Agent 和数据库团队的确定性安全审查工具,可检查 MySQL 迁移、查询和代码。它给出 safe、review 或 block 判定,并列出逐行风险及更安全的写法。

主要功能

  1. 01检查迁移中的锁、表复制和数据丢失风险
  2. 02检查查询中的不安全批量操作
  3. 03检测源代码中的 SQL 注入模式
  4. 04解释规则并列出可用检查项
  5. 05结合表结构和行数统计进行审查

适用场景

  1. 01Agent 执行迁移前进行审查
  2. 02在 CI 中拦截有风险的迁移拉取请求
  3. 03检查应用代码中的 SQL 注入风险

MCP 相关

通过本地 stdio 运行,提供审查迁移、查询和代码,以及解释规则和列出检查项的工具。SQL 可在不离开本机的情况下完成审查。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jimmyjan0824-mysql-audit": {
"command": "uvx",
"args": [
"mysql-audit-ai-agent"
]
}
}
}
启动命令uvx mysql-audit-ai-agent

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimysql-audit-ai-agent0.3.2

工具

6

收录的工具列表 · 更新于 今天

参数类型必填说明
sqlstring是
statsany否
schemaany否
free_disk_gbany否
rollback_sqlany否
mysql_versionany否

详细介绍

mysql_audit_ai_agent

为 AI 编码 Agent 提供 MySQL 架构变更安全审查。

在 Claude Code、Cursor 或其他 Agent 执行迁移之前,它会将 SQL 发送给 review_migration,并获取判定结果(safe / review / block),以及每项风险对应的行号、生产环境中的影响和安全写法。 这些检查采用基于 DBA 经验编写的确定性规则,而不是另一个大模型的猜测。

状态:测试版。所有 12 条规则都已在 CI 中使用 MySQL 8.0 和 8.4 进行验证。DBA:请试用试用套件,并报告错误结果。

规则

ID检查项默认处理需要
L01DDL 未显式指定 ALGORITHM / LOCK;ALGORITHM=COPY、LOCK=SHARED/EXCLUSIVE警告 / 阻止
L02会强制复制表的列变更:类型变更、VARCHAR 缩短或跨越 255 字节、ENUM 重排、字符集转换、删除主键阻止需要架构信息才能给出精确结果
L03对大表执行会触及行的 DDL:使用 gh-ost / pt-online-schema-change警告统计信息
L04DDL 未设置较短的 SET SESSION lock_wait_timeout(元数据锁堆积)警告
L05foreign_key_checks=1 时执行 ADD FOREIGN KEY(仅 COPY)阻止
L06在一个事务中对大表执行 UPDATE / DELETE / INSERT ... SELECT(复制延迟)警告统计信息
L07DROP / TRUNCATE / RENAME 列、表、数据库阻止
L08UPDATE / DELETE 未指定 WHERE;LIMIT 未指定 ORDER BY阻止 / 警告
L09回填未限制键范围或批量大小警告 / 信息
L10自增列小于 BIGINT;utf8 / utf8mb3警告
L11WHERE / JOIN 使用的列没有以其开头的索引警告架构信息
L12使用 f 字符串、模板字面量、字符串拼接、% / .format / Sprintf 构造 SQL(SQL 注入)阻止源代码

在同一脚本中较早创建的表会被视为空表,因此不会对这些表上的 DDL 发出警告。

  • 架构信息:当前的 CREATE TABLE 语句(SHOW CREATE TABLE)。
  • 统计信息:近似行数,例如 {"orders": 25000000},通过 SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = DATABASE() 获取。 行数达到 1,000,000 或以上的表视为大表;少于 10,000 行的表视为小表。

与 AI Agent 配合使用(MCP)

需要 uv。服务通过 stdio 在本地运行;你的 SQL 不会离开你的设备。

Claude Code

claude mcp add mysql-audit -- uvx mysql-audit-ai-agent

Cursor、Windsurf、Claude Desktop 和其他 MCP 客户端(mcp.json / claude_desktop_config.json):

{
  "mcpServers": {
    "mysql-audit": { "command": "uvx", "args": ["mysql-audit-ai-agent"] }
  }
}

Claude Desktop,一键安装:从最新版本下载 mysql-audit.mcpb 并打开。

工具:review_migration(sql, schema?, stats?)、review_query(sql, schema?, stats?)、 review_code(code)、explain_rule(rule_id)、list_rules()。

在我们的 Agent 评估中,Claude Code 在 10 项迁移任务中的 10 项都自行调用了该工具,无需额外提示词。

命令行

pip install mysql-audit-ai-agent
mysql-audit migrations/20261027_add_index.sql --schema schema.sql
mysql-audit migration.sql --stats rows.json --format json
mysql-audit --code app/models/user.py      # SQL injection check

退出代码:0 表示安全,1 表示需要审查,2 表示阻止,因此可用于设置 CI 门禁。

GitHub Action

审查每个拉取请求新增或修改的迁移,在差异中标注对应行,持续更新拉取请求中的一条摘要评论,并在结果为 block 时使检查失败。

# .github/workflows/mysql-audit.yml
name: MySQL Audit
on: pull_request
permissions:
  contents: read
  pull-requests: write   # for the summary comment
jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: jimmyjan0824/[email protected]
        with:
          paths: db/migrate/**/*.sql      # default: **/*.sql
          schema: db/schema.sql           # optional, makes checks exact
          # stats: db/table_rows.json     # optional row counts, enables large-table rules
          # code-paths: app/**/*.py       # optional SQL injection check
          # fail-on: review               # block (default), review or never

开发

pip install -e ".[dev]"
pytest

每条规则都在 tests/ 下有正向和反向测试用例。

tests/test_mysql_oracle.py 会使用真实服务器检查规则:每条 ALTER 都会以 ALGORITHM=INPLACE, LOCK=NONE 执行,MySQL 是否拒绝执行都必须与该规则的判定相符。CI 会在 MySQL 8.0 和 8.4 上运行该测试。本地运行:

docker run -d -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.4
MYSQL_HOST=127.0.0.1 MYSQL_PASSWORD=root pytest tests/test_mysql_oracle.py

中文说明

给 AI 编码代理用的 MySQL 变更安全审查。代理在执行 migration 前呼叫 review_migration, 取得 safe / review / block 判定,以及每个风险的行号、线上影响与安全写法。 规则由 DBA 经历写成,结果可重复验证。

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。