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

Adr*_*rma 0 sql-server connection-string windows-authentication node.js 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,
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

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

但我收到以下错误:

用户“”登录失败。

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

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

Pan*_*vos 5

knexmssql依次使用tediousmsnodesqlv8tedious不支持 Windows 身份验证。默认为tedious. 尝试与 Windows 身份验证一起使用tedious会导致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)
Run Code Online (Sandbox Code Playgroud)

这清楚地表明来源是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)
})()
Run Code Online (Sandbox Code Playgroud)

文档解释说您需要使用const sql = require("mssql/msnodesqlv8");来使用msnodesqlv8,例如:

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

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

不幸的是,这对 没有帮助knex,因为它直接加载和使用 tedious。不管代码注释如何,msnodesqlv8仍在积极维护,并且仅在 4 天前发布。