我正在尝试使用将Server与来自应用程序的node.js身份验证连接起来。
配置:
{
client: 'mssql',
connection: {
database: 'MyDBName',
host: 'xx.xx.xx.xxx',
server: 'MY-SERVER_NAME\\SQLEXPRESS',
options: {
encrypt: false,
trustedConnection: true,
},
},
}我没有在配置中添加用户名和密码,因为我添加了trustedConnection: true for Windows身份验证。
但我得到了以下错误:
用户“”登录失败。
即使添加用户名和密码,也会出现相同的错误。
任何建议都会有很大帮助。谢谢
发布于 2019-08-07 15:17:37
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,例如:
const sql = require("mssql");
const config = {
database: "Master",
server: "myserver",
options: {
trustedConnection: true
}
};在进行此更改后,查询将运行并生成数据库名称列表。
不幸的是,这无助于knex,因为它直接负荷和用途 tedious。尽管代码注释中写着什么,但msnodesqlv8是积极维护的,4天前才发布了一个版本。
发布于 2021-11-08 15:54:46
我能够通过在msnodeqlv8的基础上制作一个新的方言来连接这个例子。
我刚刚添加了msnodesqlv8模块,并使用了以下代码,希望它能帮助人们解决问题:
require('mssql/msnodesqlv8');
let Knex = require("knex");
let Dialect = require(`knex/lib/dialects/mssql/index.js`);
Dialect.prototype._driver = () => require('mssql/msnodesqlv8');
let sql = Knex({
client: Dialect,
connection: {
server: "<sql server>",
port: 1433,
database: "<database name>",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
}
});谢谢
https://stackoverflow.com/questions/57390776
复制相似问题