DataGate
📘 DataGate — 安全、AI 就绪的数据网关
DataGate 是一个无头、安全、策略驱动的网关,以可控、可预测且无自由 SQL 的方式向 AI 工具(如 GitHub Copilot)暴露数据库。
DataGate 充当 LLM 与真实数据库之间的中介:不允许直接访问数据库,不暴露任意查询,不允许写入操作。它被设计为只读、schema 感知、多数据库,并且完全 LLM 安全。
🎯 主要目标
安全的数据访问 — 通过数据库角色、策略引擎和受控查询构建器保证只读。
数据库抽象 — 模型不生成 SQL:DataGate 构建安全且经过验证的查询。
多数据库 — 可以像无头 DBeaver 一样连接到不同应用的不同数据库。
策略引擎 — 对表、列、过滤器、限制和操作复杂度进行细粒度控制。
Schema 感知 — 自动加载数据库 schema 并应用安全规则。
真正的并发 — 异步且安全的架构,非常适合来自 Copilot 的并行请求。
指标与审计 — 跟踪请求、时间、错误和限制,用于调试和可观测性。
性能分析 — 进程内延迟画像(min/平均/p50/p95/p99/max),用于性能演进监控。
抽象后端 — 数据库后端共用的只读 trait,并提供 PostgreSQL、MySQL/MariaDB 和 SQLite 的具体实现。
Related MCP server: MCP DB Gateway
🧩 主要功能
受控查询构建器 — 语义操作如
select、search、aggregate,并自动验证。类型化 MCP
select— JSON 契约,以 JSON 行执行只读操作,包含策略、审计和净化后的错误;MCP transport 仍是下一步。类型化 MCP
search— 在允许的列上使用ILIKE进行语义搜索,参数化查询,策略/速率限制/指标/审计,以及服务端输出限制。类型化 MCP
aggregate— 在允许的列上执行count、sum、avg、min和max,使用参数化过滤器,不支持自由 SQL 或GROUP BY。版本化 MCP API — 用于 API 版本和可用工具的稳定描述符。
MCP stdio transport — 在策略安全路径上进行握手、发现以及
select、search和aggregate调用。高级过滤器 — 支持模式(
LIKE/ILIKE)、范围(BETWEEN)和全文(to_tsvector+plainto_tsquery),始终参数化并由策略验证。受控 schema 目录 — 对表、视图、索引、约束(PK/FK/UNIQUE/CHECK/EXCLUSION)、触发器、函数、存储过程和序列进行策略过滤的内省;仅当安全时才提供 DDL 定义。
速率限制 — 防止模型循环和过重查询。
输出限制 — 响应始终受控、安全且结构化。
确定性错误 — 无 schema 泄露、不暴露 SQL、无堆栈跟踪。
结构化错误 — 稳定的封装,包含代码、通用消息和
retryable指示。外部配置 — 用于策略、限制和命名配置文件(dev/staging/prod)的 TOML 文件。
MCP 输入加固 — 验证
request_id,限制文本负载和基数,以减少 DoS/输入滥用面。动态策略 — 活动策略可以原子替换,甚至可以从 TOML 重新加载,而无需重新创建 MCP 工具。
DataGate 不暴露自由 SQL 查询的 MCP 函数:代理仅发送结构化参数,这些参数在构建参数化查询之前会针对 schema 和策略进行验证。
公共错误使用代码 invalid_request、policy_denied、backend_unavailable 和 internal_error。SQL、堆栈跟踪、密码、过滤器值和未授权对象名称不会跨越 MCP 边界。
PostgreSQL 配置
PostgreSQL 凭据不会保存在配置文件或代码中。服务从运行时环境读取连接:
紧凑模式:
DB_URL组件模式:
DB_HOST、DB_PORT(默认5432)、DB_USER、DB_PASSWORD、DB_NAMEPostgreSQL 选项:
DB_OPTIONS,格式为key=value&key=value连接池:
DB_MAX_CONNECTIONS和DB_ACQUIRE_TIMEOUT_SECS
SQLite 配置
要以只读模式使用 SQLite,请配置以下两种变体之一:
完整 URL:
SQLITE_URL文件路径:
SQLITE_PATH
SQLite 连接池选项:
SQLITE_MAX_CONNECTIONSSQLITE_ACQUIRE_TIMEOUT_SECS
MySQL/MariaDB 配置
要以只读模式使用 MySQL 或 MariaDB,请配置以下两种变体之一:
完整 URL:
MYSQL_URL组件模式:
MYSQL_HOST、MYSQL_PORT(默认3306)、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE
MySQL/MariaDB 连接池选项:
MYSQL_MAX_CONNECTIONSMYSQL_ACQUIRE_TIMEOUT_SECS
多数据库后端选择
要显式选择激活哪个后端,请设置 DATAGATE_BACKEND:
auto(默认):优先级postgres->mysql->sqlitepostgresmysql(或mariadb)sqlite
当 DATAGATE_BACKEND 设置为特定后端时,DataGate 要求相应的环境配置;否则会以明确错误终止。
启动时的后端优先级:
PostgreSQL
MySQL/MariaDB
SQLite
列表中最先配置的后端将被激活。
可选的服务器端速率限制使用 RATE_LIMIT_REQUESTS 和 RATE_LIMIT_WINDOW_SECS。该限制在策略、查询构建器和数据库之前按 request_id 应用;超过阈值的请求会收到 rate_limited,并且不会生成 SQL。
查询构建器还通过策略中的 max_query_complexity 应用可配置的最大预算:每列花费 1,每个过滤器花费 2。超出预算的请求会在生成 SQL 之前被拒绝。
select 响应还受策略中的 max_output_bytes 约束:如果最终 JSON 负载超过限制,DataGate 会以策略错误拒绝请求,而不会暴露 SQL 或内部细节。
指标层还为 select 工具记录服务器端计数器和延迟:总/接受/拒绝请求、后端错误、内存中的 p95 延迟以及 PostgreSQL 连接池快照(size、idle)。
应用日志支持两种格式:
LOG_FORMAT=pretty(默认)LOG_FORMAT=json(结构化,适合日志收集器)
日志的最低级别可以通过 LOG_LEVEL(trace|debug|info|warn|error)或 RUST_LOG 配置。
如果存在 DB_URL,则优先于组件。PostgreSQL 角色必须仅具有读取权限;此外,每个连接都会设置 default_transaction_read_only = on。
活动配置文件通过 profile = "dev" 选择,并可在 [profiles.dev.policy] 中定义策略。如果不存在命名配置文件,则仍支持旧版 [policy] 形式。声明但不存在配置文件会激活 deny-all 策略,且不会启动数据库操作。
已发布的版本包含 Linux x64/ARM64、Windows x64/ARM64 和 macOS Intel/Apple Silicon 的二进制文件,带有按平台命名的归档文件和用于验证构件的 SHA256SUMS-* 文件。
🛡️ 为什么选择 DataGate?
LLM 不应直接与数据库对话。 需要一个安全、可预测、可控、可审计、可扩展且支持多应用的层。DataGate 就是这个层。
🔧 技术
语言:Rust
数据库:PostgreSQL、MySQL/MariaDB 和 SQLite(目前),未来支持其他数据库
协议:MCP(Model Context Protocol)
架构:异步、策略驱动、schema 感知
🚀 项目状态
DataGate 处于设计阶段。该仓库包含初始结构、文档和技术路线图。
🧪 多后端集成测试
后端集成测试使用可选环境变量:
DATAGATE_TEST_POSTGRES_URLDATAGATE_TEST_MYSQL_URL
当变量存在时,相应测试会验证只读后端执行受控的 SELECT 并拒绝写入语句。如果变量不存在,测试将被跳过而不报错。
完整文档:
Architecture.md — 设计原则和分层架构
ROADMAP.md — 通往 1.0 的详细路线图
docs/configuration.md — 快速入门、后端、策略和操作
docs/benchmarks.md — 本地 SQLite 和真实 PostgreSQL 基准测试
docs/hardening.md — MCP/数据库边界的最终加固检查清单
docs/http-transport-decision.md — 关于远程 MCP HTTP transport 的安全决策
docs/editor-registry-evaluation.md — MCP Registry 要求和跨编辑器客户端评估
docs/packaging.md — 打包渠道和构件的规范来源
docs/postgres-mcp-comparison.md — 与其他 PostgreSQL MCP 服务器的对比
docs/registry-publication.md — MCP Registry 策略、跨编辑器安装和命名连接
docs/mcp-registry-metadata.json — 用于 MCP registry/画廊的候选元数据
docs/release-candidate.md — 1.0 候选版本的标准和门禁
docs/mcp-tools.md — MCP 工具的内部契约和规则
CONTRIBUTING.md — 贡献、提交和分支规则
SECURITY.md — 安全策略和漏洞报告
通过 VS Code 使用 MCP 启动:
默认本地 transport 是
stdio本地 stdio 的
mcp.json模板位于 docs/mcp-tools.md 和 docs/configuration.md远程 HTTP 不在 1.0 默认范围内,需要专门的安全决策
📍 路线图(概要)
定义策略引擎
实现受控查询构建器(参数化 select)
保证只读连接
自动 schema 感知(内部 PostgreSQL 目录)
审计日志基础(通过
AUDIT_LOG_PATH的 JSONL)MCP 工具(
select、search、aggregate)多数据库支持(PostgreSQL、MySQL/MariaDB、SQLite)
初始企业层(可观测性、加固、动态策略)
MCP API 稳定性(版本化描述符;stdio transport)
MCP stdio transport
基准测试
最终加固
1.0 候选版本
📄 许可证
This server cannot be deployed
Maintenance
Related MCP Connectors
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
One governed MCP endpoint for 40+ business systems. Read-only, source-cited answers.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.101 npm3MIT

MCP DB Gatewayofficial
AlicenseNot gradedqualityBmaintenanceProvides governed, read-only PostgreSQL access for AI agents via MCP. Enforces schema/table allowlists, query limits, and audit events.1MIT- AlicenseNot gradedqualityBmaintenanceProvides read-only, guarded access to business databases via MCP. Enables natural language querying with built-in security barriers like table allowlists, PII masking, and audit logging.MIT
- FlicenseNot gradedqualityBmaintenanceEnables secure, read-only querying of only predefined logical database views through MCP tools and a REST API, using validated SQL and semantic view metadata.-