WaLiSSH 项目实战:SSH 连接配置库表设计 —— 表拆分、字段选型、索引与凭证加密全解析
发布时间:2026/9/27 12:08:32 锦皓数字建站

文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载《WaLiSSH - AI Shell 智能终端》是一款本地运行的 AI SSH 运维助手服务端采用 DDD 架构 MySQL 8.x 持久化 SSH 连接与上下文数据。本篇文章聚焦项目第 1-4 节的核心内容如何把上一节已打通的基础 SSH 连接能力沉淀为可持久化的配置库表。读完本文你将掌握 SSH 连接配置的业务需求建模、两张表的拆分设计思想、字段类型与索引的选择原则以及密码/私钥凭证的加密存储方案并看到这些表如何与后续 DDD 领域设计 中的 PO、DAO、Mapper 衔接。一、本章诉求为什么要做库表设计在上一节 SSH 连接云服务器 中我们基于 JSch 完成了 SSH 会话的基础设施实现并做了单测验证。但那时连接参数主机、端口、用户名、密码等还停留在内存中一旦服务重启、客户端关闭配置就全部丢失。本节课程的诉求非常明确把关于 SSH 的配置信息存储到数据库中让连接配置持久化这是从能连上到能管理的关键一步。围绕这个目标本节要完成五件事理解 SSH 连接配置的业务需求明确表结构设计的目标掌握表拆分设计的思想理解为什么要把配置拆成两张表学习字段类型选择的原则包括 varchar、tinyint、longtext 的使用场景了解索引设计的最佳实践包括主键、唯一索引、普通索引的作用理解数据加密存储的方案密码和私钥为什么要加密、怎么加密。学习建议你可以先按照这样的分析思路独立完成一次库表设计再对照下文内容查漏补缺收获会更大。二、库表关系从需求分析出发在动手写CREATE TABLE之前先分析 SSH 连接配置的业务需求。简单来说SSH 连接配置就是用户在 WaLiSSH 客户端中保存的服务器连接信息它决定了后续 AI Agent 以哪个身份、连到哪台服务器、用什么方式执行运维命令。从上一节的基础连接体验出发需求可以拆成三大类2.1 基础连接信息这一类是建立 SSH 会话的最小必要集合连接名称如腾讯云服务器主机地址如140.143.183.225端口号默认 22用户名如root、ubuntu认证方式密码 or 私钥认证凭证密码 or 私钥内容其中认证方式与认证凭证是联动的认证方式决定了凭证字段里存放的是密码还是私钥内容。2.2 高级配置信息这一类控制连接行为的细节参数决定连接的健壮性与安全性连接超时时间默认 10 秒保活间隔默认 60 秒是否启用压缩是否严格检查主机密钥已知主机密钥列表连接后执行的启动命令2.3 系统管理信息这一类服务于多用户场景与数据治理用户ID如果是公司里使用有登录权限操作的时候可以区分不同用户的配置连接状态未连接、已连接、连接中、连接失败加密标志标识凭证是否加密创建时间、更新时间逻辑删除标志至此业务侧的需求全景已经清晰后面的表拆分、字段选型、索引与加密设计都是围绕这三类信息展开的。三、表拆分设计为什么拆成两张表这是本节的一个核心设计决策。从需求分析可以看出基础连接信息是高频访问、短小固定的而高级配置与系统管理信息中包含了已知主机密钥列表私钥内容连接后执行的启动命令这类大体积、低频读取的数据。如果全部塞进一张表会出现两个问题宽表膨胀单行数据变大MySQL 每页默认 16KB能容纳的行数变少索引扫描与缓存命中率下降读写互相拖累每次查询基础连接信息都要把大字段一起读进内存即使业务上根本用不到。因此设计上把配置拆成两张表——从后续 第1-5节 连接SSH简单领域设计 的正文可以确认这两张表的落库命名为ssh_connection与ssh_connection_config表名职责存放内容ssh_connection连接主表基础连接信息 系统管理信息连接名称、主机、端口、用户名、认证方式、凭证、用户ID、状态、加密标志、时间戳、逻辑删除标志ssh_connection_config连接配置扩展表高级配置信息超时时间、保活间隔、压缩开关、严格校验主机密钥、已知主机密钥列表、启动命令两张表通过主表的主键连接ID建立 1:1 关系ssh_connection_config以连接ID为外键保证每条连接配置唯一对应一条扩展配置。这样的拆分让高频短小的连接信息与低频大体积的扩展信息各自独立存储与访问这也正是后续领域服务封装数据操作时的底层依据。四、字段类型选择varchar、tinyint、longtext 的适用场景字段类型的选择原则很简单按数据真实形态与体量选择最小可用类型。结合三类需求可以梳理出三个典型的类型决策4.1 varchar —— 变长字符串适用于长度不固定的短文本如连接名称varchar(64)或varchar(128)足够容纳腾讯云服务器这类中文名称注意使用utf8mb4字符集以支持中文与 emoji主机地址varchar(64)IPv4 地址、域名都够用用户名varchar(64)认证方式可用varchar(16)存password/key枚举字符串便于阅读若追求极致紧凑也可用tinyint加字典表但字符串在运维场景更直观。经验varchar是按需分配的字段实际存储字节数跟随内容变化不会像char那样固定占用适合名称、地址这类长不长不一定的数据。4.2 tinyint —— 枚举与布尔开关适用于取值集合小、状态有限的字段占 1 字节取值 -128~127无符号 0~255足够表达连接状态未连接、已连接、连接中、连接失败4 个枚举值可再预留扩展位是否启用压缩0/1 布尔开关是否严格检查主机密钥0/1 布尔开关加密标志0/1标识凭证是否已加密逻辑删除标志0/1配合软删除策略。用tinyint而非int一是节省存储1 字节 vs 4 字节二是通过0/1、小范围枚举天然约束非法值写入语义也更贴近开关量。4.3 longtext —— 大文本适用于超出常规文本长度的内容私钥内容OpenSSH 格式私钥通常在 1.7KB 左右但带注释、证书、多密钥场景会更大已知主机密钥列表known_hosts内容会随连接服务器数量增长连接后执行的启动命令可能是多行脚本。这些内容用varchar有长度上限最大 65535 字节且受行大小限制用text族中的longtext最大 4GB则无后顾之忧。代价是大字段不参与索引、读取较慢所以更应该放进独立的ssh_connection_config扩展表与高频字段隔离——这正好呼应了第三部分的表拆分设计。4.4 时间与数值字段端口号int默认 22取值范围 0~65535连接超时时间、保活间隔int秒默认值分别取 10、60与需求中的默认行为保持一致创建时间、更新时间datetime/timestamp由数据库或应用层统一维护。五、索引设计主键、唯一索引与普通索引索引设计的目的是用最少的索引覆盖最常见的查询路径。SSH 连接配置最常见的查询是登录用户加载自己的连接列表、按名称查找某条连接、按连接ID读取扩展配置。据此可以规划三层索引索引类型建议字段作用主键索引连接ID自增或雪花ID唯一标识一行InnoDB 聚簇索引的物理组织依据ssh_connection_config也以连接ID为主键实现 1:1 关联唯一索引用户ID 连接名称约束同一用户下连接名称不重复防止同名连接造成混淆同时天然支持按用户 名称精确查找普通索引用户ID、连接状态支撑某用户全部连接列表按状态过滤如只看已连接这类高频过滤查询值得注意的两点唯一索引承担双重职责它既是数据完整性约束阻止重复数据又是查询加速手段唯一索引的等值查找效率高于普通索引。(user_id, name)的组合唯一索引正是系统管理信息里有用户ID这一需求在索引层的落地大字段与索引绝缘私钥、已知主机密钥列表这类longtext字段不能建索引也不应该出现在 WHERE 条件里它们的访问路径永远是从主表拿到连接ID后再精确查询扩展表。六、数据加密存储密码与私钥为什么要加密、怎么加密SSH 凭证密码、私钥是数据库里最敏感的数据——一旦数据库被拖库、备份文件泄露、运维误操作导出明文凭证将直接暴露服务器的登录能力。因此需求分析里专门设计了加密标志字段0/1标识凭证是否加密存储。这正是凭证加密方案的关键设计加密标志与凭证字段配套加密标志 1 时凭证字段存放的是密文读取时先判断标志再决定是否解密算法选型方向密码与私钥属于可逆数据每次连接都要还原出明文适合使用对称加密算法如 AES配合密钥管理私钥场景也可叠加非对称加密保护密钥管理是加密方案的灵魂加密算法的强度再高密钥泄露等于一切白费密钥应独立于数据库存储环境变量、密钥管理系统与应用配置分离敏感数据不出日志与加密配套的是输出控制凭证字段不应出现在接口返回值、日志打印与 SQL 慢日志中。说明本小节给出的是基于需求分析与行业通用实践的方案设计思路具体的加密工具类与密钥配置会在后续章节随领域服务与基础设施实现逐步落地。七、与领域层的衔接PO、DAO、Mapper 与后续演进库表设计不是终点它是领域模型与持久化之间的桥梁。从 第1-5节 连接SSH简单领域设计 可以看到完成这两张表设计后项目随即展开了三层落地动作POPersistent Object为ssh_connection、ssh_connection_config各建一个持久化对象字段与表一一对应DAOData Access Object封装对两张表的增删改查操作Mapper编写 SQL 映射承载实际的 SQL 语句与结果集映射。再往上在 DDD 六边形架构中这些数据库操作会被封装进领域层——SSH 连接的增加改查、连接建立与断开等业务方法聚合在领域服务里底层换成任何 SSH 库或 ORMDomain 层代码都无需改动。表结构设计阶段的每一次取舍拆分、类型、索引、加密标志最终都会反映到 PO 字段与 Mapper SQL 中。对项目全貌感兴趣的同学可结合 WaLiSSH 项目介绍 与 学习指引环境准备、代码下载、项目部署继续学习。八、小结本节围绕 WaLiSSH 的 SSH 连接配置持久化完成了一条完整的库表设计链路需求驱动设计从基础连接、高级配置、系统管理三类信息出发明确表结构要解决持久化 多用户 安全三个目标拆分优于宽表ssh_connection与ssh_connection_config两张表分离高频短小字段与低频大体积字段兼顾查询效率与存储成本类型与索引克制varchar 管短文本、tinyint 管枚举开关、longtext 放大文本唯一索引约束(user_id, name)防重普通索引支撑列表与状态过滤凭证安全前置加密标志 对称加密 独立密钥管理把密码/私钥不能明文入库固化为表结构层面的设计约束。下一节 连接SSH简单领域设计 将基于这两张表完成 PO、DAO、Mapper 与领域服务的封装把库表设计真正转化为可运行、可单测的业务能力。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐Dgraph全文搜索索引设计字段选择与配置Dgraph全文搜索索引设计字段选择与配置 在现代应用开发中全文搜索已成为用户体验的关键组成部分。Dgraph作为高性能的分布式图数据库提供了强大的全文搜数据库图数据库分布式数据库后端小型支付商城支付订单场景库表设计建表、字段、索引与使用四类规范实战小型支付商城支付订单场景库表设计建表、字段、索引与使用四类规范实战 支付商城的核心链路是下单 → 创建支付单 → 收银台支付 → 回调更新状态 → 消息驱动文档教程后端Miller 字段解析与格式化完全指南拆分、连接、unformat 与 nest 实战Miller 字段解析与格式化完全指南拆分、连接、unformat 与 nest 实战 导读 在 Miller 的数据处理流程中经常需要把单个字符串字段拆成CLI数据分析上一篇SymPy 力学模块入门质点、刚体、惯量、载荷与动能量函数 API 完全指南下一篇Amazon Bedrock AgentCore Runtime 持久化记忆集成hindsight-agentcore 使用与源码解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。