如何使用 knex 模块从 Node.JS 通过 Windows 身份验证连接到 SQL 服务器
How to connect to SQL Server with Windows authentication from Node.JS using knex module
我正在尝试使用 knex 连接 SQL 服务器,并从我的 node.js 应用程序进行 Windows 身份验证。
配置:
{
client: 'mssql',
connection: {
database: 'MyDBName',
host: 'xx.xx.xx.xxx',
server: 'MY-SERVER_NAME\SQLEXPRESS',
options: {
encrypt: false,
trustedConnection: true,
},
},
}
我没有在配置中添加用户名和密码,因为我为 Windows 添加了 trustedConnection: true
身份验证.
但我收到以下错误:
Login failed for user ''.
即使我添加用户名和密码,我也会得到同样的错误。
任何建议都会有很大帮助。谢谢
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
的docs explain,例如:
const sql = require("mssql");
const config = {
database: "Master",
server: "myserver",
options: {
trustedConnection: true
}
};
此更改后,查询运行并生成数据库名称列表
不幸的是,这对 knex
没有帮助,因为它 loads and uses tedious
directly. Despite what the code comment says, msnodesqlv8 正在积极维护并且仅在 4 天前发布。
我能够通过基于 this example
制作新方言使用 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
}
}
});
谢谢
我正在尝试使用 knex 连接 SQL 服务器,并从我的 node.js 应用程序进行 Windows 身份验证。
配置:
{
client: 'mssql',
connection: {
database: 'MyDBName',
host: 'xx.xx.xx.xxx',
server: 'MY-SERVER_NAME\SQLEXPRESS',
options: {
encrypt: false,
trustedConnection: true,
},
},
}
我没有在配置中添加用户名和密码,因为我为 Windows 添加了 trustedConnection: true
身份验证.
但我收到以下错误:
Login failed for user ''.
即使我添加用户名和密码,我也会得到同样的错误。
任何建议都会有很大帮助。谢谢
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
的docs explain,例如:
const sql = require("mssql");
const config = {
database: "Master",
server: "myserver",
options: {
trustedConnection: true
}
};
此更改后,查询运行并生成数据库名称列表
不幸的是,这对 knex
没有帮助,因为它 loads and uses tedious
directly. Despite what the code comment says, msnodesqlv8 正在积极维护并且仅在 4 天前发布。
我能够通过基于 this example
制作新方言使用 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
}
}
});
谢谢