dsh-database-explorer
已验证dsh-database-explorer · v0.9.22 · MIT · Web 界面
Database explorer for DeepSeek Harness: connect SQLite / MySQL / PostgreSQL / SQL Server / MongoDB / ClickHouse / Redis / Elasticsearch / Qdrant (vector DB) — zero-dependency NoSQL & vector engines, browse schemas and run SQL — a PyCharm-Database-style pa
安装
dsh plugin add dsh-database-explorer 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-database-explorer
DeepSeek Harness 的数据库浏览器插件——在对话区「数据库」页签里,像 PyCharm 的 Database 面板一样直接浏览、查询、修改你的数据库。
A PyCharm-Database-style database panel for DeepSeek Harness, as a third Conversation tab.
它能做什么
支持的数据库(9 种)
| 类型 | 引擎 | 说明 |
|---|---|---|
| SQL | SQLite | 内置 node:sqlite,开箱即用,零驱动 |
| SQL | MySQL / MariaDB | mysql2 驱动 |
| SQL | PostgreSQL | pg 驱动(含 pgvector:ORDER BY embedding <=> '[…]') |
| SQL | SQL Server | mssql 驱动 |
| SQL | ClickHouse | @clickhouse/client |
| NoSQL | MongoDB | mongodb 驱动,查询框收 JSON 命令文档 |
| NoSQL | Redis | 零依赖(RESP2 协议自实现),按 key 类型分组浏览 |
| NoSQL | Elasticsearch | 零依赖(Node 原生 fetch),便捷搜索或原始 REST |
| 向量 | Qdrant | 零依赖,向量搜索 / scroll / payload 浏览 |
SQL 驱动为可选依赖:装哪个用哪个,不用的不用装。
面板功能
- 结构树:连接 → 库/Schema → 表/视图 → 字段,点击逐级展开;MySQL 大库内省走两条
information_schema全量查询(300 表不再 300 次往返) - 浏览数据:点表名直接看数据,服务端 LIMIT/OFFSET 分页(50–1000 行/页),表头排序、过滤(值参数化防注入)
- 编辑数据:双击单元格回车保存(按主键参数化 UPDATE,主键列标 🗝,无主键表只读);➕ 新增行表单插入;行内删除
- 建表 / 改表:可视化设计器,字段名/类型/主键/自增/唯一/默认值/外键全部点选,可先预览 SQL 再执行
- 删表:表行 🗑 一键
DROP TABLE——要求手输表名确认(按钮在匹配前禁用),宿主侧二次校验,只读连接拒绝,删除与失败尝试都进审计 - 导入 / 导出:CSV(Excel 友好 BOM)/ JSON / SQL INSERT / Markdown 表格导出(上限 10 万行,SQL 层限流不撑内存);CSV / JSON 导入带映射预览(dryRun 不写库)
- E-R 关系图:外键自动布局 + SchemaSpy 式命名推断(无外键约束的库也能画),表视图 / Chen 概念图两种画法;可编辑——拖动、改名、改基数、手工建实体和联系,「还原」一键回到数据库真实结构
- 单元格查看器:长文本 / JSON 格式化 / PNG·JPEG 预览 / 二进制 hex,一键复制
- 查询历史:最近 100 条,localStorage 持久化
- 连接档案导入 / 导出:⬆/⬇ 一键迁移,导出永远脱敏(不含任何形式密码),换机器不用手抄
- 写操作审计:所有写操作(含只读连接上被拒绝的尝试)逐条入账,面板 📜 查看最近 200 条,支持单条删除与清空(删除动作本身也留痕)
在聊天里直接用(agent 工具)
安装重启后,10 个工具自动注册给 DSH 的 AI 助手,聊天里直接说:
- “列出我的数据库连接” →
db_list_connections - “users 表前 10 行” →
db_connect+db_peek_page - “这个库有哪些表和字段?” →
db_schema/db_describe_table - “users 和 orders 是什么关系?” →
db_er_graph
调用过程与结果摘要在会话中实时展示。密码永不进入对话——工具没有密码参数,连接一律使用面板记住的凭据。
接入任意 AI 客户端(MCP 出口)
零依赖 MCP stdio 服务器(lib/mcp.js),与面板共享连接档案和安全规则。在 Claude Desktop / Cursor 等客户端注册:
{ "command": "node", "args": ["<插件目录>/lib/mcp.js"], "env": { "DSH_HOME": "可选,默认 ~/.dsh" } }
安装
方式一:dshmarket 市场(推荐)— 在 DSH 设置 → 插件 → 市场里搜 dsh-database-explorer,点安装。
方式二:命令行
npm install -g dsh-database-explorer # 或
dsh plugin --profile web add dsh-database-explorer
安装后必须完全退出并重启 DSH Desktop(托盘右键退出,不是刷新页面)。插件的后端注册在 DSH 进程里,页面刷新更新不到它;升级后前后端版本不一致时,面板顶部会挂红色横幅明确提醒。
快速上手
- 打开对话区 数据库 页签(聊天、轨迹旁边)
- 点 + 新建连接:选类型、填主机/端口/账号,勾 记住密码 重启免输;生产库建议勾 🔒 只读
- 展开连接,点表名——右侧出数据
- 双击单元格改数据,或点 ➕ 行 插入、⤓ 导出、⤒ 导入
- 工具条 📜 看写操作审计,⛓ 画 E-R 图,+ 建表;表行 🗑 删表(强确认:手输表名才能执行)
安全模型
三层写权限
| 层 | 机制 | 效果 |
|---|---|---|
| 连接级只读 | 连接编辑勾选 🔒 只读 | 该连接一切写路径被硬拒绝:面板写操作、agent 写工具、SQL/原生命令统一按语句预检(仅放行单条读语句;redis 按读命令白名单、mongo 仅 find/count/aggregate、es/qdrant 仅读端点)。SQLite 只读模式打开文件、pg 会话级只读、ClickHouse readonly=1 引擎级兜底 |
| agent 写工具授权 | 默认关闭 | SQL 执行 / 改格 / 插行 / 删行需在 ~/.dsh/plugin-data/dsh-database-explorer/ 创建空文件 agent-write-tools 显式授权(重启生效),删除文件即收回。模型不可自授 |
| 写操作审计 | 自动 | 改格/删行/插行/导入/建表/改表/删表/写 SQL(含被拒尝试)逐条记入 plugin-data/dsh-database-explorer/audit-log.jsonl(超 5MB 轮转一代)。面板 📜 查看;删除记录/清空日志的动作本身也会留痕 |
推荐用法:生产库建两个档案——「生产库 🔒 只读」日常浏览随便点,「生产库(可写)」真正要改数据时才连。
密码安全
- 默认只在内存;勾「记住密码」后 Windows 落盘自动经 DPAPI(CurrentUser) 加密为
dpapi:v1:<密文>,connections.json不再有明文(防文件外流;不防同用户本地进程,DPAPI 语义如此) - agent 工具 / MCP 无密码参数,一律复用面板记住的凭据
- 档案导出永远脱敏
网络围栏
所有接口同源校验 + Host 白名单(localhost / 127.0.0.1 / ::1),防 DNS rebinding;DSH 供局域网使用时,非本机请求返回 403 并说明原因。本插件仅允许本机浏览器访问。
排障
| 症状 | 原因与处理 |
|---|---|
| 没有「数据库」页签 | 完全退出 DSH Desktop 重启(后端注册在 DSH 进程里,刷新页面无效) |
| 面板顶部红色版本横幅 | 前后端版本不一致(升级后没重启)——完全退出重启即消 |
| 连接报「缺少驱动」 | SQL 驱动必须装进 DSH profile 的 node_modules(市场 / dsh plugin add 会装好;游离在 profile 外的插件副本装不了驱动) |
| 局域网另一台机器打开是 403 | 设计如此:本插件仅允许本机访问,在本机浏览器打开 |
| 单元格双击不能编辑 | 该表无主键(防误改),或当前连接是只读连接,或结果来自 SQL 查询(SQL 结果一律只读) |
| ES 深分页报错 | Elasticsearch from+size 引擎限制(>10000),用 scroll 或收窄条件 |
开发
npm test # 全量回归(8 个套件,含真实 SQLite 边界用例)
npm run release # 发布流水线:版本握手 → pack 清单闸门(拦截 lib/package.json 遮蔽宿主包定位)→ 三副本同步 → 回归 → git tag → npm publish
架构:宿主半区(lib/index.js 路由 + lib/connections.js 连接管理 + lib/tools.js agent 工具 + lib/mcp.js MCP 出口)运行在 DSH 进程;浏览器半区(lib/client.js)经 dsh.client 声明注入对话区。注意:lib/ 目录下不要放名为 package.json 的文件——DSH 从模块位置向上找最近清单,会遮蔽包根配置导致 UI 无法注入(release 流水线已加闸门拦截)。
Source / 源码
https://github.com/xing-he888/dsh-database-explorer
License
MIT