我正在尝试使用 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
。
但是我遇到以下错误:
用户“”登录失败。
即使添加添加用户名和密码,我也会遇到相同的错误。
任何建议都会有很大帮助。谢谢
答案 0 :(得分:2)
knex
使用mssql
,后者依次使用tedious
或msnodesqlv8
。 tedious
不支持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天前发布了版本。