You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨服务器从Linux的Spring Boot应用连接Windows的SQL Server数据库并执行SQL命令

远程SQL Server访问实现方案

按照链路复杂度从低到高排列,优先选择链路最短、稳定性最高的方案:

1. 原生JDBC直连(首选实现)

这是性能最好、维护成本最低的方案,完全不需要依赖已有的SSH、跨服HTTP调用能力,只要网络链路打通即可使用。
具体落地步骤:

  • 网络层打通:
    • Windows服务器端配置防火墙,放通SQL Server默认1433端口的入站规则,允许Linux服务器的IP访问
    • 在Windows的SQL Server配置管理器中,开启SQL Server服务的TCP/IP协议,确认端口绑定为1433,重启SQL Server服务生效
  • 项目依赖引入:在Spring Boot项目中添加微软官方提供的mssql-jdbc驱动依赖,版本匹配当前使用的JDK版本、SQL Server版本即可
  • 数据源配置:
    spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.datasource.url=jdbc:sqlserver://<Windows服务器IP>:1433;databaseName=<目标库名>;encrypt=false;trustServerCertificate=true
    spring.datasource.username=<SQL Server登录账号>
    spring.datasource.password=<SQL Server登录密码>
    
  • 业务实现:直接通过Spring自带的JdbcTemplate封装简单SQL的执行逻辑,支持查询、增删改操作,记得给数据库账号配置最小操作权限,避免高危操作风险。

2. SSH隧道端口转发(网络策略受限场景备选)

如果两个服务器之间有安全组/防火墙限制,不允许直接开放1433端口跨网访问,可以利用已有的SSH登录能力,建立加密隧道转发数据库流量。
具体实现:

  • 在Linux服务器上执行SSH端口转发命令,将本地1433端口的流量,通过SSH连接加密转发到Windows服务器本机的SQL Server端口:
    ssh -L 1433:127.0.0.1:1433 <Windows服务器SSH账号>@<Windows服务器IP>
    
  • 执行完成后,Linux侧访问本地127.0.0.1:1433的数据库请求,会全程通过SSH加密链路传到Windows的SQL Server服务,后续数据源配置只需要把连接URL里的地址改成127.0.0.1:1433即可,其余配置和直连方案完全一致
  • 生产环境建议配合autossh做SSH隧道的常驻保活,避免连接断开导致数据库访问中断。

3. HTTP代理转发(无直连、无SSH隧道权限场景兜底)

如果既不能开放数据库端口、也不能用SSH做隧道转发,可以利用已有的跨服HTTP调用能力,在Windows服务器侧部署一个轻量的SQL执行代理服务:

  • 在Windows服务器上跑一个简单的接口服务,接收Linux侧Spring Boot发来的带SQL语句的HTTP请求,在Windows本地连接SQL Server执行SQL,把查询结果序列化后通过HTTP响应返回
  • 注意必须给代理接口加权限校验、SQL语句白名单校验,禁止执行DROP/ALTER/TRUNCATE这类高危操作,避免出现安全风险
  • 这个方案链路最长、维护成本最高,仅适用于前两个方案都走不通的极端场景。

内容的提问来源于stack exchange,提问作者Raul Marquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 10:27:01