如何使用knex模块从Node.JS通过Windows身份验证连接到SQL Server

时间:2019-08-07 09:07:32

标签: node.js sql-server connection-string windows-authentication knex.js

我正在尝试使用 knex 和来自我的node.js应用程序的Windows身份验证连接SQL Server。

配置:

 {
  client: 'mssql',
  connection: {
    database: 'MyDBName',
    host: 'xx.xx.xx.xxx',
    server: 'MY-SERVER_NAME\\SQLEXPRESS',
    options: {
      encrypt: false,
      trustedConnection: true,
    },
  },
}

我没有在配置中添加用户名和密码,因为我为 Windows身份验证添加了trustedConnection: true

但是我遇到以下错误:

  

用户“”登录失败。

即使添加添加用户名和密码,我也会遇到相同的错误。

任何建议都会有很大帮助。谢谢

1 个答案:

答案 0 :(得分:2)

knex使用mssql,后者依次使用tediousmsnodesqlv8tedious不支持Windows身份验证。默认值为tedious。尝试将tedious与Windows身份验证一起使用会导致... Login failed for user ''.。完整的错误消息是:

(node:16568) UnhandledPromiseRejectionWarning: ConnectionError: Login failed for user ''.
    at Connection.<anonymous> (K:\testprojects\nodesql\node_modules\mssql\lib\tedious.js:244:17)
    at Object.onceWrapper (events.js:291:20)
    at Connection.emit (events.js:203:13)
    at Connection.processLogin7Response (K:\testprojects\nodesql\node_modules\mssql\node_modules\tedious\lib\connection.js:1397:14)
    at Connection.message (K:\testprojects\nodesql\node_modules\mssql\node_modules\tedious\lib\connection.js:1932:14)
    at Connection.dispatchEvent (K:\testprojects\nodesql\node_modules\mssql\node_modules\tedious\lib\connection.js:1084:36)
    at MessageIO.<anonymous> (K:\testprojects\nodesql\node_modules\mssql\node_modules\tedious\lib\connection.js:984:14)
    at MessageIO.emit (events.js:203:13)
    at Message.<anonymous> (K:\testprojects\nodesql\node_modules\mssql\node_modules\tedious\lib\message-io.js:32:14)
    at Message.emit (events.js:208:15)

清楚地表明来源是tedious

要得到这个,我使用了以下代码段:


const sql = require("mssql");
const config  = {
  database: "Master",
  server: "myserver",
  options: {
    trustedConnection: true
  }
};


(async () => {
        await sql.connect(config)
        const result = await sql.query`select name from sys.databases`
        console.dir(result)
})()

使用const sql = require("mssql/msnodesqlv8");才能使用msnodesqlv8的{​​{3}},例如:

const sql = require("mssql");
const config  = {
  database: "Master",
  server: "myserver",
  options: {
    trustedConnection: true
  }
};

此更改后,查询将运行并生成数据库名称列表

不幸的是,这对knex毫无帮助,因为它直接docs explain tedious。尽管有代码注释的说明,loads and uses仍在积极维护中,并且仅在4天前发布了版本。

相关问题