前言¶
用 DSH 做开发时,让模型直接查数据库是个常见需求,常见做法有两种:把 DSN 贴进对话让模型自己连,密码从此进入模型上下文;或者自己维护一个常驻的数据库 MCP 服务,要管端口、管进程生命周期。dsh-dbhub-live 走了另一条路:密码只留在宿主侧,模型只拿到一个 source 句柄;每次查询起一个一次性进程,执行完即回收。下面介绍它的设计、安装与用法。
这是什么¶
dsh-dbhub-live 是 mr-mihu 维护的 DSH 插件,当前版本 4.0.0,MIT 许可证。它基于 DBHub(数据库 MCP 服务器)做桥接:模型只说「查哪个工作区的哪个环境」,插件在宿主侧解析真实连接并执行——密码和完整连接串不会出现在模型能看到的地方。
支持的数据源:MySQL、PostgreSQL、MariaDB、SQLite、SQL Server。
核心设计:凭据零知识¶
- 密码、用户名、完整 DSN 只存在于宿主侧;模型可见的只有
source句柄和元数据(类型 / 主机 / 端口 / 库名)。 - 配置或修改密码时在界面输入,不经过模型。
- dbhub 的报错文本在返回前会被清洗;查询结果与连接列表只标注
mysql://host:3306/db这类不含账号密码的元数据。
这条设计决定了后续很多行为:鉴权失败时插件给出明确指引,由模型引导你在界面更新密码,而不是向模型索要密码。
一次性进程执行¶
插件没有常驻的 dbhub 服务。每次工具调用都会 spawn 一条独立的 dbhub 进程,执行完即回收。效果是:
- 单条查询挂掉只影响它自己;
- 多任务并行、多个 DSH 实例同时运行互不干扰——没有共享端口,也不存在互杀。
恒定的 4 个工具¶
无论配了多少环境,插件向模型声明的工具恒定是 4 个:
dbhub_configure(workspace?, env?, type?, host?, port?, database?, user?)
dbhub_list_sources()
dbhub_execute_sql(source, sql)
dbhub_search_objects(source, object_type, ...)
dbhub_configure:为工作区配置并持久化连接。它不接受dsn参数——密码和连接串一律在界面输入;type/host/port/database/user可作为非敏感预填。dbhub_list_sources:列出全部连接源(工作区 × 环境),只含元数据和对应的source值。dbhub_execute_sql:在指定数据源上执行 SQL,多语句用;分隔。dbhub_search_objects:搜索数据库对象(表/视图/列/索引等),目前仅对 SQLite 开放;MySQL、PostgreSQL 等请用dbhub_execute_sql直接查(如SHOW TABLES)。
工具数量不随环境数增长,模型上下文不会因此膨胀。
按工作区 × 环境管理连接¶
一个工作区可以配多个环境(default / prod / dev / test…),通过 source 值区分:默认环境不带后缀,命名环境形如 <工作区>_<环境>。
配置有三种方式,都在界面上完成:
- 输入完整 DSN,如
mysql://user:pass@host:3306/db; - 按类型 / 主机 / 端口 / 账号 / 密码 / 库名分项填写;
- 授权后扫描项目配置文件(
.env、application*.yml、docker-compose、jdbc.properties等),列出候选连接供确认——只显示主机 / 端口 / 库,密码不显示,由插件直接读取。
另外,工作区若已有 mise env 或 .env(DSN / DB_*),插件会自动发现连接,无需手动配置。扫描默认跳过 node_modules / .git / target / dist 等目录。
状态卡片与启停¶
安装重启后,到 设置 → 插件 → dsh-dbhub-live 可以看到状态卡片(仅在 dsh web 端可见),包含:状态徽章、工作模式、已注册工具数、环境数、最近错误、启用/禁用开关,以及连接的增删改查和连接测试。卡片文案跟随 dsh 界面语言(中 / 英)切换。
两个值得知道的细节:
- 关闭开关后,所有 dbhub 工具立即返回「插件已禁用」的友好提示,无需重启;
- 连接测试是一次性反馈,约 10 秒后自动消失,失败不会标记或限制这条连接,慢库最长等待约 30 秒。
安装与卸载¶
先确认环境要求:需要 DeepSeek Harness 的 dsh CLI(dsh web 负责 GUI 运行),推荐本机有 Node.js ≥ 18(含 npm)——dbhub 会在首次执行时自动安装。
安装命令:
# 使用本机已安装的 dsh
dsh plugin --profile web add dsh-dbhub-live
# 或通过 npx 调用,无需全局安装 dsh
npx @deepseek-ai/dsh plugin --profile web add dsh-dbhub-live
安装后重启 dsh web 生效。需要固定版本更新时:
dsh plugin --profile web update dsh-dbhub-live@4.0.0
dbhub 的自动安装包名默认为 @bytebase/dbhub,之后按间隔自动更新:默认 7 天,设为 0 关闭。可在状态卡片修改「自动更新间隔(天)」,优先级为 用户设置 > 进程环境变量(默认值种子)> 内置默认;对应环境变量为 DSH_DBHUB_UPDATE_DAYS 与 DSH_DBHUB_PACKAGE。
所有配置与凭据存放在:
~/.dsh/storages/dsh-dbhub-live/
按 DSH_HOME 实例隔离,删除该目录即可完整清空。卸载用:
dsh plugin --profile web remove dsh-dbhub-live
典型用法¶
经过上面的安装步骤并重启后,工具由 DSH 的 AI 自动调用,你直接用自然语言提需求即可,比如「查一下 users 表」。工具层面的流程如下:
# 1) 当前工作区还没有连接时,AI 先引导配置(密码在界面输入,AI 看不到)
dbhub_configure
# 2) 在已配置连接上执行查询(source 见 dbhub_list_sources)
dbhub_execute_sql source=myapp sql="SELECT * FROM users LIMIT 10;"
# 3) 查看已注册的连接与 source 值
dbhub_list_sources
如果对话中模型问你要密码,这是设计如此——让 AI 调用 dbhub_configure,在界面弹出的输入框里填密码即可;或自行到 设置 → 插件 → 工作区连接 修改。
适用场景与注意事项¶
适合的场景:
- 本地开发或调试时,让 AI 直接执行查询、查看表与数据;
- 不希望数据库密码出现在对话上下文里的使用者;
- 一个工作区需要区分 dev / prod / test 等多个环境连接的情况。
注意事项:
- 插件以当前 dsh 进程权限运行:它会读取你授权的配置文件、在宿主侧发起数据库连接。安装前建议先检查源码(见下方 GitHub 链接)与许可证(MIT)。
- 状态卡片只在
dsh web的 Web 设置面板可见;无设置面板的终端环境不影响工具使用。 dbhub_search_objects仅对 SQLite 开放。
小结¶
dsh-dbhub-live 解决的核心问题是「让模型用上数据库,但不让它碰到密码」:凭据零知识加一次性进程执行,把安全面和并发问题都收在宿主侧,连接则按工作区 × 环境管理。如果你在用 DSH 且经常让 AI 查库,可以按上面的步骤装上试试。
- GitHub:https://github.com/mr-mihu/dsh-dbhub-live
- 社区目录:https://www.skillhub.cn/plugins/mr-mihu/dsh-dbhub-live