schemagate 是什么?在选表阶段就按权限过滤 schema 的 text-to-SQL 访问控制

ashishsinha1602/schemagate · GitHub · 官网
RAG 知识库
Star103
近 7 天新增0
编程语言Python
开源协议Apache-2.0
创建于2026-09-06
最近更新2026-10-15

中文导读

schemagate 针对 text-to-SQL 中「先选表、后鉴权」的问题:模型可能对调用者无权读取的表生成 SQL,RLS 过滤后用户只看到空结果。它把权限检查提前到 schema 选择阶段,无权访问的表直接不出现在 prompt 中,并支持多种数据库与 LangChain、MCP 等 agent 框架。选择器离线运行、不调用模型,适合需要控制 prompt 成本并做数据访问隔离的 SQL agent 场景。

根据 GitHub 公开数据,该项目的编程语言为 Python,开源协议为 Apache-2.0,创建于 2026-09-06,最近更新于 2026-10-15,目前有 103 个 Star。

项目介绍

schemagate 解决的是 text-to-SQL 流程中一个容易被忽略的环节:在把数据库 schema 交给模型之前,先按调用者的权限做过滤。传统做法是先把所有表塞进 prompt,再靠行级安全(RLS)在查询执行时拦截,结果是模型可能针对一张调用者根本无权读取的表生成合法 SQL,RLS 把行全部过滤掉,用户只看到「没有记录」,无法区分是数据不存在还是无权访问。schemagate 把权限检查提前到 schema 选择阶段,无权访问的表不会出现在 prompt 里,而不是排在后面。

它支持 Postgres、Oracle、MySQL、SQL Server 和 SQLite,可配合 LangChain、MCP 或任意 SQL agent 使用。选择器本身不调用模型,基于 BM25 加哈希嵌入,离线运行,毫秒级完成。README 给出的基准显示,在 260 个对象的 schema 上,平均 prompt token 从 16,095 降到 444。

主要功能

适合谁用

需要在 text-to-SQL 或 SQL agent 中做权限隔离的开发者,以及关心 prompt 成本与数据访问安全的团队。

快速上手

  1. pip install schemagate
  2. schemagate demo "salary by employee"
  3. schemagate demo "salary by employee" --principal okta:hr --role payroll
  4. schemagate select "revenue by month" --url postgresql://localhost/app --principal okta:jdoe --role finance
  5. schemagate studio --url postgresql://localhost/app

Star 增长趋势

103103 · 2026-10-14 至 2026-10-16

同类项目

自托管、可扩展的 AI 对话界面,支持 Ollama 与 OpenAI 兼容 API
★ 15.6万 · Python · 更新于 2026-10-16
构建智能体与 LLM 应用的开发框架
★ 14.8万 · Python · 更新于 2026-10-15
100+ 开源 AI Agent、Agent Skills 与 RAG 应用合集
★ 14.2万 · Python · 更新于 2026-10-15
把代码库与文档变成可查询的知识图谱
★ 12.7万 · Python · 更新于 2026-10-14
为 AI 编程助手提供跨会话持久记忆的压缩系统
★ 10.1万 · TypeScript · 更新于 2026-10-16
开源 RAG 引擎,融合 Agent 能力为 LLM 构建上下文层
★ 9.2万 · Go · 更新于 2026-10-15