首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用knex模块从Node.JS连接使用Windows身份验证的Server

如何使用knex模块从Node.JS连接使用Windows身份验证的Server
EN

Stack Overflow用户
提问于 2019-08-07 09:07:32
回答 2查看 6.5K关注 0票数 0

我正在尝试使用将Server与来自应用程序的node.js身份验证连接起来。

配置:

代码语言:javascript
复制
 {
  client: 'mssql',
  connection: {
    database: 'MyDBName',
    host: 'xx.xx.xx.xxx',
    server: 'MY-SERVER_NAME\\SQLEXPRESS',
    options: {
      encrypt: false,
      trustedConnection: true,
    },
  },
}

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

但我得到了以下错误:

用户“”登录失败。

即使添加用户名和密码,也会出现相同的错误。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-07 15:17:37

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

代码语言:javascript
复制
(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

为了得到这个,我用了这个片段:

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
const sql = require("mssql");
const config  = {
  database: "Master",
  server: "myserver",
  options: {
    trustedConnection: true
  }
};

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

不幸的是,这无助于knex,因为它直接负荷和用途 tedious。尽管代码注释中写着什么,但msnodesqlv8是积极维护的,4天前才发布了一个版本。

票数 5
EN

Stack Overflow用户

发布于 2021-11-08 15:54:46

我能够通过在msnodeqlv8的基础上制作一个新的方言来连接这个例子

我刚刚添加了msnodesqlv8模块,并使用了以下代码,希望它能帮助人们解决问题:

代码语言:javascript
复制
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
      }
  }
});

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57390776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档