Skip to content

fix: retain SQL table extraction when skipping whitelist checks - #1464

Merged
ulleo merged 1 commit into
mainfrom
fix/preserve-sql-table-parsing
Nov 12, 2026
Merged

ulleo merged 1 commit into
mainfrom
fix/preserve-sql-table-parsing

Conversation

@ulleo

@ulleo ulleo commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

Summary

修正 #1463 中启动参数的作用范围:SQLBOT_SKIP_TABLE_CHECK=true 仅跳过白名单外表的拒绝,始终提取真实表名,无法提取表名时仍拒绝。参数名、默认值和启动生效方式保持不变,同步修正配置与安全说明。

提取 SQL 的真实表名
  无法提取 → 始终报错
  白名单外表且未开启跳过 → 报错
  其余情况 → 继续既有权限处理、保存与执行检查

Evidence

  • Before: 在 6cb69d00 上运行新的局部回归用例,结果为 4 failed, 2 passed:跳过参数会放过无表名/解析失败的 SQL,也不会调用表名提取。
    After: 修正后相关回归 64 passed,覆盖默认白名单拒绝、CTE、开关两种状态下的表名提取失败、显式跳过白名单后继续执行,以及写操作/危险函数/元数据查询拒绝。
  • 在 backend/ 执行:
    LOG_FORMAT='%(levelname)s %(message)s' uv run --no-sync pytest -q tests/test_table_check.py tests/test_postgres_denylist.py tests/test_cwe89_escape_fix.py --tb=short
  • 验证内容对应 fd3d3342(文件树 2c648c3d);复用开发阶段结果,提交和 PR 阶段未重复测试。使用已有 Python 3.11.18 / pytest 7.4.4 / sqlglot 30.14.0 环境,未同步依赖。
  • 测试文件通过 Ruff lint/格式检查;两个现有代码文件的 Ruff lint/格式问题与基线一致,无新增诊断;diff 检查通过。
  • 离线测试执行真实任务流程与 SQL 解析,替换模型、持久化和数据库 I/O。未执行真实模型、数据库、浏览器或部署验收。

Merge Danger

Door: two-way

单提交,无迁移或依赖变更,可 Rebase and merge。

Blast Radius: deployment

默认行为不变。已设置跳过参数的部署将恢复对表名提取失败的拒绝(包括 SELECT 1 这类无表名查询),仍允许白名单外但可提取表名的 SQL 进入后续流程。

@ulleo
ulleo merged commit 28482b1 into main Nov 12, 2026
3 checks passed
@ulleo
ulleo deleted the fix/preserve-sql-table-parsing branch November 12, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant