【问题标题】:Nodejs mssql server connection throws an errorNodejs mssql服务器连接抛出错误
【发布时间】:2021-12-01 15:38:54
【问题描述】:

我想从 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:

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

【问题讨论】:

  • 您使用的是 Windows 身份验证还是 SQL 身份验证?前者不使用用户名和密码
  • 我正在使用 SQL 身份验证。我该怎么办?
  • 使用带有 SQL Auth 的 SSMS 连接进行测试。 SQL Auth 在 SQL Server 中默认是禁用的。
  • 是否为使用该用户名的登录名分配了连接权限(CONNECT SQL)以及db_datareader 角色?
  • ssl_choose_client_version:unsupported protocol 表明 SQL Server 正在使用 Tedious 不支持的 SSL/TLS 协议。您是否尝试将encrypt: false 添加到您的连接选项中?

标签: node.js sql-server tedious


【解决方案1】:

您需要在 Sequelize inside 选项中将 encrypt 设置为 false。

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

);

【讨论】:

    【解决方案2】:

    问题是因为源服务器和目标服务器之间的 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
        }
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      相关资源
      最近更新 更多