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

Linux环境下使用node-mssql连接MSSQL数据库失败求助

Node-mssql连接MSSQL在Linux环境失败排查与解决

问题概述

本地Windows机器使用node-mssql连接MSSQL 2019数据库正常,但部署到Linux服务器后连接失败,报错涉及crypto模块的Hmac错误。升级NodeJS和node-mssql版本后出现该问题,旧版本(NodeJS 16.15.0 + node-mssql 4.3.7)可正常连接。

报错信息

src/node_modules/tedious/lib/connection.js: 2423
throw err

Error: error:00000000 : lib(0):func(0):reason(0)
at new Hmac(node:internal/crypto/hash:136:17)
at Object.createHmac (node:crypto:165:10)

当前配置信息

const sqlConfig = {
  user: process.env.DB_USER,
  password: process.env.DB_PWD,
  database: process.env.DB_NAME,
  domain: process.env.Domain,
  server: process.env.server,
  port: process.env.port, // 原配置缺失逗号,需修正语法错误
  pool: {
    max: 10,
    min: 0,
    idleTimeoutMillis: 30000
  },
  options: {
    encrypt: true, // for azure
    trustServerCertificate: true // change to true for local dev / self-signed certs
  }
}

async () => {
 try {
  await sql.connect(sqlConfig)
  const result = await sql.query`select * from mytable where id = ${value}`
  console.log(result)
 } catch (err) {
  console.log(err) // 原代码错误使用未定义变量error,需改为err
 }
}

软件版本对比

  • 当前故障环境版本:
    • NodeJS: 18.17.1
    • node-mssql: 10.0.2
    • SQL Server: 2019
  • 原正常工作版本:
    • NodeJS: 16.15.0
    • node-mssql: 4.3.7
    • SQL Server: 2019

解决方向

1. 修复配置语法错误

先修正配置中的两处明显错误:

  • port: process.env.port后添加逗号,保证对象结构合法
  • catch块中console.log(error)改为console.log(err),避免未定义变量报错

2. 检查Linux环境OpenSSL版本

NodeJS 18.x依赖较新版本的OpenSSL,部分Linux发行版自带版本可能不兼容。执行以下命令查看版本:

openssl version

若版本低于1.1.1,建议升级OpenSSL到1.1.1及以上版本。

3. 调整加密与NTLM认证配置

由于使用域账号(配置含domain字段),尝试修改options配置:

options: {
  encrypt: true,
  trustServerCertificate: true,
  ntlmV2: true // 强制使用NTLMv2认证,适配Linux环境
}

若数据库服务器无需加密连接,可尝试将encrypt设为false测试。

4. 验证环境变量加载

Linux环境变量加载逻辑与Windows不同,确保DB_USER、DB_PWD、Domain等变量正确设置且可被NodeJS读取。可在代码开头添加日志验证:

console.log("加载的数据库配置:", {
  user: process.env.DB_USER,
  server: process.env.server,
  port: process.env.port,
  domain: process.env.Domain
});

5. 检查网络连通性

确认Linux服务器能访问MSSQL服务器端口(默认1433),执行以下命令测试:

telnet <数据库服务器IP> <端口>
# 或使用nc命令
nc -zv <数据库服务器IP> <端口>

若不通,检查Linux服务器防火墙、数据库服务器防火墙及网络路由规则。

内容的提问来源于stack exchange,提问作者Aditya yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:03:38