4.3 DBHub:一个 MCP 连多种数据库

它是什么

Bytebase 出品的数据库 MCP,npm 包 @bytebase/dbhub(实测版本 1.5.0)。

背景值得一说:旧的官方 Postgres 服务器已归档不再维护。2026 年社区文档推荐的路径正是 DBHub 这类多数据库网关,以及各托管数据库厂商(Supabase、Neon)自己的服务器。换句话说,想给 agent 接数据库,DBHub 是当前最稳的一站式选择。

为什么是“多数据库”

一个二进制支持多种数据库,对使用者的好处很直接:

好处 说明
配置统一 一套 MCP 配置,换 DSN 即换库
心智负担小 不用为每种库记一个服务器
维护集中 升级一次全受益

通常覆盖 Postgres、MySQL 等主流关系库。对同时使用多种数据库的小团队,这点尤其省事——不必为 Postgres 装一个、为 MySQL 再装一个。

安装与配置

npm install --global @bytebase/dbhub
- insert:
    - id: dbhub
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: dbhub
        transport: stdio
        command: npx
        args:
          - "-y"
          - "@bytebase/dbhub"
          - "--dsn"
          - "postgresql://user:pass@localhost:5432/mydb"
        cwd: !!js process.cwd()

一条安全铁律

DSN 里有密码。 绝对不要明文写进 YAML。

正确做法是用 !!js 从环境拼:

        args:
          - "-y"
          - "@bytebase/dbhub"
          - "--dsn"
          - !!js process.env.DATABASE_URL

配套地,建一个只读账号给 agent 用:

CREATE USER agent_ro WITH PASSWORD '...';
GRANT CONNECT ON DATABASE mydb TO agent_ro;
GRANT USAGE ON SCHEMA public TO agent_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro;

最后那句 GRANT SELECT 是关键——只给 SELECT。agent 不需要 INSERT / UPDATE / DROP。哪怕它的工具描述写着“支持写”,账号层面也该把写权限关死,这是纵深防御。

典型用法

Schema 理解:

用 dbhub 读取 mydb 的结构:
列出所有表、每表字段与类型、主外键关系。

数据体检:

用 dbhub 查询 orders 表最近 7 天的记录数按日分布,
标出异常偏低或偏高的日期。

慢查询辅助分析:

用 dbhub 对这条 SQL 跑 EXPLAIN:
<粘贴 SQL>
解读执行计划,指出最可能的瓶颈。

只读核对:

用 dbhub 核对:用户表里 last_login 为空的账户有多少,
按注册渠道分组,只查不写。

排错

现象 原因
连不上 DSN 错、库未启动、网络不通
权限不足 账号缺某表的 SELECT
查询超时 缺索引或数据量大,加 LIMIT

它和 git / filesystem 的关系

三者都和“数据资产”有关,但层级不同:filesystem 管文件、git 管版本、DBHub 管数据库。当你要“查线上真实数据”时,DBHub 是唯一选择;但要记住它触碰的是生产数据,只读账号 + 人工复核是底线。

小结

  • DBHub 是一个 MCP 连多种数据库,填补了官方 Postgres 服务器归档后的空缺。
  • DSN 含密码,必须 !!js 从环境读,绝不写明文。
  • 给 agent 建只读账号,只授 SELECT。

延伸阅读