Skip to content

feat: add startup option to skip SQL table checks - #1463

Merged
ulleo merged 1 commit into
mainfrom
fix/optional-table-check
Nov 12, 2026
Merged

ulleo merged 1 commit into
mainfrom
fix/optional-table-check

Conversation

@ulleo

@ulleo ulleo commented Nov 12, 2026

Copy link
Copy Markdown
Contributor

Summary

增加启动参数 SQLBOT_SKIP_TABLE_CHECK,默认 false。仅显式设为 true 时跳过生成 SQL 的表名提取、无法提取表名时的拒绝及表白名单检查。参数在启动时读取,修改后重启生效,不增加配置页面或运行时修改;补充配置说明及安全约定。

生成 SQL
  if not SQLBOT_SKIP_TABLE_CHECK(默认)
    提取真实表名
    拒绝无法提取表名或引用白名单外表的 SQL
  继续既有权限处理、保存与执行检查

Evidence

  • Before: 基线 ca069c51 无条件执行表检查,没有启动配置可以跳过。
    After: 默认及显式 false 保留检查;显式 true 跳过提取和拦截,仍执行后续权限处理和数据库执行检查。
  • 开发阶段在 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
    → 62 passed。
  • 覆盖启动参数默认值、布尔解析、非法值拒绝及非热更新;合法表与 CTE、模型虚报表名、未知表、无表名和解析失败;跳过后仍拒绝写操作、危险函数及默认禁用的元数据查询。
  • 验证内容对应 051857e0(文件树 ec1d1115);提交仅固化已验证内容,未重复运行测试。使用已有 Python 3.11.18 / pytest 7.4.4 / sqlglot 30.14.0 环境,未同步依赖;uv 提示环境创建时的 Python 补丁版本与当前不同。
  • 新测试文件通过 Ruff lint 和格式检查;现有两个代码文件的 Ruff 问题与基线一致,无新增诊断;diff 检查通过。
  • 离线测试使用真实任务流程和 SQL 解析,模型、持久化及数据库 I/O 替换为测试对象;未做真实模型、数据库、浏览器或部署验收。

Merge Danger

Door: two-way

关闭跳过参数并重启即可恢复默认检查,无迁移或依赖变更。单提交基于最新 main,无 merge commit,可按 Rebase and merge 重放。

Blast Radius: deployment

默认行为不变。显式开启时影响该部署内共用问数流程的入口,可能允许查询数据源账号可读取的未勾选表;只读、危险函数、元数据查询控制及既有权限处理仍照常执行。

@ulleo
ulleo merged commit 6cb69d0 into main Nov 12, 2026
3 checks passed
@ulleo
ulleo deleted the fix/optional-table-check branch November 12, 2026 10:10
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