AS

ashishsinha1602/schemagate

Database management

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

179 stars 2 forks Качество 86 Тренд 52Apache-2.0

Контроль доступа от текста к SQL: выбор схемы, который даёт LLM только те таблицы, которые вызывающий может читать. Обрезка таблиц с учётом безопасности на уровне строк для LangChain, MCP и любого SQL-агента.

Обзор

Ваш агент от text-to-SQL выбирает, какие таблицы показывать модель, прежде чем кто-либо проверит, что может читать вызывающий. Schemagate сначала проводит проверку: он фильтрует схему по данным вызывающего, поэтому ограниченные таблицы отсутствуют в запросе, а не ранжируются низко. Работает с LangChain, MCP или любым SQL-агентом на Postgres, Oracle, MySQL, SQL Server и SQLite. Если она не пускает таблицу из запроса, к которому она никогда не должна была попасть, это ⭐ помогает другим SQL-агентам найти её. При безопасности только на уровне строк сбой: модель записывает корректный SQL в таблицу, которую вызывающий не может прочитать, RLS удаляет все строки, и пользователю сообщают «записей не найдено» — что неотличимо от «этих данных не существует». Демонстрация · Установка · Бенчмарки · Местные модели · Сколько это стоит · Из Ванны Тот же вопрос, два звонящих, нет базы данных и ключа: Отсутствует, не занимает низкий ранг.

Обзор (машинный перевод)

Ваш агент от text-to-SQL выбирает, какие таблицы показывать модель, прежде чем кто-либо проверит, что может читать вызывающий. Schemagate сначала проводит проверку: он фильтрует схему по данным вызывающего, поэтому ограниченные таблицы отсутствуют в запросе, а не ранжируются низко. Работает с LangChain, MCP или любым SQL-агентом на Postgres, Oracle, MySQL, SQL Server и SQLite.

Если она не пускает таблицу из запроса, к которому она никогда не должна была попасть, это ⭐ помогает другим SQL-агентам найти её.

При безопасности только на уровне строк сбой: модель записывает корректный SQL в таблицу, которую вызывающий не может прочитать, RLS удаляет все строки, и пользователю сообщают «записей не найдено» — что неотличимо от «этих данных не существует».

Демонстрация · Установка · Бенчмарки · Местные модели · Сколько это стоит · Из Ванны

Тот же вопрос, два звонящих, нет базы данных и ключа:

Отсутствует, не ранжируется низко. Таблица, которую вызывающий не может прочитать, никогда не входит в Так что никакая переформулировка вопроса не доходит до неё, и нет ничего Отфильтруйте ответ потом.

Попробуйте в браузере — нет установка, без базы данных, без вызова модели.

И он отвечает

Выбор — это подсказка, поэтому остальное следует:

Эта страница переведена автоматически. Технические детали смотрите в оригинале.

README

Показан фрагмент оригинального README. Открыть оригинал.

schemagate — text-to-SQL access control at schema selection

Your text-to-SQL agent picks which tables to show the model before anyone checks what the caller is allowed to read. schemagate does the check first: it filters the schema by the caller’s grants, so restricted tables are absent from the prompt rather than ranked low. Works with LangChain, LlamaIndex, MCP, or any SQL agent, on Postgres, Oracle, MySQL, SQL Server and SQLite.

If it keeps a table out of a prompt it should never have reached, a ⭐ helps other people building SQL agents find it.

With row-level security alone the failure is quiet: the model writes valid SQL against a table the caller cannot read, RLS strips every row, and the user is told “no records found” — indistinguishable from “this data does not exist.”

Открыть полный README на GitHub

Установка

uvx --from schemagate[mcp postgres
Новичок в MCP? Начните с руководства на mcpskill.org →

Конфигурация

{"mcpServers": {"schemagate": { "command": "uvx", "args": ["--from", "schemagate[mcp,postgres]", "schemagate-mcp"], "env": {"SCHEMAGATE_DATABASE_URL": "postgresql+psycopg://user:password@localhost/app"}}}}