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。
延伸阅读
- 本章其余小节:4.2 Serena、4.4 Sentry
- 密钥管理:1.4 持久化、密钥与验证排错
- 文件白名单:2.1 filesystem
