首页 > 解决方案 > Nodejs mssql服务器连接抛出错误

问题描述

我想从 nodejs 连接我的 mssql 数据库。我为此使用了 sequelize 和乏味的模块。我的连接配置是这样的

const sequelize = new Sequelize(
    "mydb",
    "username", "password", {
    host:config_data.host,
    "dialect":"mssql",
    "port":1433
    dialectOptions: {
        instanceName: "MSSQLSERVER"
    },
  
},
);

当我尝试运行脚本时,它会引发错误。

(node:14584) UnhandledPromiseRejectionWarning: SequelizeConnectionError: Failed to connect to 192.168.10.220:1433 - Could not connect (sequence)

我在配置管理器中应用所有步骤。启用 TCP/IP 启动服务器 SQL 浏览器 将 1433 端口添加到防火墙

当主机为“localhost”时还有额外的错误。(当前写入的IP地址)

(node:13552) UnhandledPromiseRejectionWarning: SequelizeConnectionError: Failed to connect to localhost:1433 
- 4292:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:1947:

在此处输入图像描述

我需要帮助,有人知道吗?

标签: node.jssql-servertedious

解决方案


问题是由于源和目标服务器之间的 TLS 协议不匹配。就我而言,我的应用服务器是 Ubuntu 20.04,而我的 SQL Server(Express 2012)在 Windows 服务器上。我还尝试在 Ubuntu 上降级 TLS 协议,但没有任何效果。所以最后我在 Sequelize 中禁用了 tls 加密。确保选项按照 Sequelize 的预期给出

const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  port: dbConfig.PORT,
  dialect: dbConfig.dialect,
  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle,
  },
  // The below options are important to supress ssl issue on
  // AWS EC2 ubuntu when db server is on windows. There is TLS protocol issue
  // Which by using these options we disable tls encryption
  dialectOptions: {
  // Observe the need for this nested `options` field for MSSQL
    options: {
      encrypt: false,
      enableArithAbort: false
    }
  }
});

推荐阅读