dsh-dbhub-live: A DBHub bridge plugin enabling DSH to directly and safely operate on databases.

前言

用 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 值区分:默认环境不带后缀,命名环境形如 <工作区>_<环境>

配置有三种方式,都在界面上完成:

  1. 输入完整 DSN,如 mysql://user:pass@host:3306/db
  2. 按类型 / 主机 / 端口 / 账号 / 密码 / 库名分项填写;
  3. 授权后扫描项目配置文件(.envapplication*.ymldocker-composejdbc.properties 等),列出候选连接供确认——只显示主机 / 端口 / 库,密码不显示,由插件直接读取。

另外,工作区若已有 mise env.envDSN / 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_DAYSDSH_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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye