dsh-dbhub-live:讓 DSH 直接、安全地操作數據庫的 DBHub 橋接插件

前言

用 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
羽毛球分组比赛记分
小程序二维码

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

小夜