Skip to main content
Glama

📘 DataGate — 安全、AI 就绪的数据网关

Build Release License

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_NAME

  • PostgreSQL 选项:DB_OPTIONS,格式为 key=value&key=value

  • 连接池:DB_MAX_CONNECTIONS 和 DB_ACQUIRE_TIMEOUT_SECS

SQLite 配置

要以只读模式使用 SQLite,请配置以下两种变体之一:

  • 完整 URL:SQLITE_URL

  • 文件路径:SQLITE_PATH

SQLite 连接池选项:

  • SQLITE_MAX_CONNECTIONS

  • SQLITE_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_CONNECTIONS

  • MYSQL_ACQUIRE_TIMEOUT_SECS

多数据库后端选择

要显式选择激活哪个后端,请设置 DATAGATE_BACKEND:

  • auto(默认):优先级 postgres -> mysql -> sqlite

  • postgres

  • mysql(或 mariadb)

  • sqlite

当 DATAGATE_BACKEND 设置为特定后端时,DataGate 要求相应的环境配置;否则会以明确错误终止。

启动时的后端优先级:

  1. PostgreSQL

  2. MySQL/MariaDB

  3. 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_URL

  • DATAGATE_TEST_MYSQL_URL

当变量存在时,相应测试会验证只读后端执行受控的 SELECT 并拒绝写入语句。如果变量不存在,测试将被跳过而不报错。

完整文档:

通过 VS Code 使用 MCP 启动:

📍 路线图(概要)

  • 定义策略引擎

  • 实现受控查询构建器(参数化 select)

  • 保证只读连接

  • 自动 schema 感知(内部 PostgreSQL 目录)

  • 审计日志基础(通过 AUDIT_LOG_PATH 的 JSONL)

  • MCP 工具(select、search、aggregate)

  • 多数据库支持(PostgreSQL、MySQL/MariaDB、SQLite)

  • 初始企业层(可观测性、加固、动态策略)

  • MCP API 稳定性(版本化描述符;stdio transport)

  • MCP stdio transport

  • 基准测试

  • 最终加固

  • 1.0 候选版本

📄 许可证

Apache License 2.0

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.
    101 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides governed, read-only PostgreSQL access for AI agents via MCP. Enforces schema/table allowlists, query limits, and audit events.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables secure, read-only querying of only predefined logical database views through MCP tools and a REST API, using validated SQL and semantic view metadata.
    -