schemagate 将权限校验前置到 SQL 生成
开源项目 schemagate 根据数据库授权向模型展示可读表,并在查询执行前拦截越权访问。作者公布多项公开基准结果及预测文件,其中已回答的 8,128 条查询未读取未授权数据,部分榜单与隐藏测试结果仍待确认。
AI 深度解读
text-to-SQL 的难点不只是把自然语言变成 SQL,还要保证提问的人只能查到有权读取的数据。开源项目 schemagate 把权限检查放到生成之前:先缩小模型可见的表,再拦截触碰权限边界的查询。
作者用一个月跑了多组公开基准,结果显示,这条路线能兼顾权限控制与查询准确率。不过,已公开的评测、作者自报的成绩和仍在等待验证的提交,需要分开看。
先限制模型看什么,再检查它查什么
schemagate 从一个问题出发:当前调用者有权读取哪些数据?
它直接读取数据库自身的授权信息(grants),只向模型展示当前用户可以读取的表。SQL 生成后,还会检查查询是否触碰权限之外的对象;发现越界,就在查询到达数据库之前拒绝执行。
这形成了两道约束:生成前减少模型接触的范围,生成后检查实际访问目标。相比只在提示词里要求模型遵守权限,它增加了程序层面的检查,也避免在应用里重新维护一份容易失去同步的权限清单。
权限边界由数据库授权提供,不能只靠模型自觉遵守。
但原文没有交代列级权限、行级权限,以及复杂数据库对象如何处理,不能把表级可见范围直接理解成覆盖所有数据安全需求。
权限成绩不错,但零越权有明确范围
作者表示,所有分数都来自对应基准自己的评测器,预测结果也已放进仓库。
在 RBAC Text-to-SQL(SIGMOD '27)上,schemagate 获得 90.1 AC-F1,同一模型下,论文最佳配置为 88.1。原文没有展开 AC-F1 的计算方式,读者不宜把它直接当作普通查询准确率。
Spider-ACL 覆盖全部 19,624 个问题与角色组合,拒绝判断的 F1 为 0.984,已发表最佳成绩为 0.933。F1 同时考虑该拒绝的请求有没有被拦住,以及拒绝是否准确,单看拒绝数量并不能替代这个指标。
另一个直观结果是:8,128 次已回答的查询中,没有查询读取该角色未获授权的数据。
这是有价值的测试结果,但它描述的是这批测试中的表现,不能据此宣称生产环境永远不会越权。
单次模型调用能做到什么,哪些成绩还没落定
作者在包含全部 1,534 个问题的 Dev 集上,取得 77.1% 的执行准确率。每题只调用一次模型,没有候选答案投票,也没有 agent 循环。执行准确率关注查询运行后是否得到正确结果,比 SQL 文本是否长得一样更贴近实际用途。
其他成绩需要连同条件一起读:
| 评测范围 | 作者报告的结果 | 对照与状态 |
|---|---|---|
| Mini-Dev | SQLite / PostgreSQL / MySQL 分别为 81.0 / 72.6 / 72.4 | 高于当前榜单领先者,但榜单 PR 仍待维护者合并 |
| SQLite 子集,135 题 | 每题一次调用,准确率 71.9% | 同子集已发表最佳 agent 报告 57.8% Pass@1 |
| UniQL,Oracle 方言,1,534 题 | 首次尝试准确率 64.5% | 已发表最佳基线为 49.6 |
作者认为,UniQL 的提升主要来自两条 Oracle 语法提示规则。但原文没有给出规则内容,也没有展示逐条移除规则的对照结果,暂时无法复用或核验这个归因。
完整榜单所需的 BigQuery、Snowflake 测试仍在进行;隐藏测试集已经提交,由 BIRD 团队运行。作者还明确提醒:Mini-Dev 在合并前属于自报成绩,单次运行约有 1 个百分点的波动,Spider 2.0 的数字只覆盖该基准的三分之一。
我的判断
我认可它把权限收敛放在 SQL 生成之前的设计。对接企业内部数据时,先确定访问范围,再让模型写查询,是一条清晰、可检查的工程路径。
准确率结果也说明,单次调用值得作为起点。但这些实验没有统一模型、提示词、成本和运行条件的完整对照,不能进一步推导出 agent 循环或候选投票没有价值。尤其是 Oracle 的两条规则,目前属于作者对实验的经验归因。
实际接入还有一个前提:业务用户与数据库授权之间必须有可靠映射。如果应用共用一个高权限数据库账号,终端用户的限制全部写在业务代码里,直接读取该账号的 grants 未必能得到正确边界。原文没有解释这种情况如何接入。
能拿来做什么
- 给 Node 数据问答服务做原型时,可以先检查业务用户、角色与数据库 grants 的映射,再评估 schemagate。项目支持 Oracle、PostgreSQL、SQL Server、MySQL 和 SQLite,可通过 MCP server、LangChain retriever 或 CLI 使用。
- 评估 AI 编程工具的数据访问能力时,可以同时统计查询正确率、拒绝判断和实际越权读取,避免只看 SQL 能否执行成功。
- 可以先用每题一次模型调用建立基线,再决定是否增加重试或 agent 循环;遇到 Oracle 方言问题,优先检查语法约束,但原文那两条规则仍需作者补充。
试用的安装命令如下:
pip install schemagate
注意安装的是 schemagate。项目采用 Apache-2.0 许可,作者报告 PyPI 下载量约 10,000 次,统计来自 pypistats,排除了镜像下载;下载量只能说明使用关注度,不能替代接入验证。