使用SQL Server时出现“Login failed for user”错误,但使用tedious却没有。

3

我正在尝试从一台运行在网络上的Windows 10机器上连接到一个安装有SQL Server Express数据库的系统,我的Macbook运行以下代码。我可以使用tedious连接,但无法使用mssql连接。就像用户名或密码不正确一样。我想让mssql工作是为了池化和更好的支持...否则我会使用tedious。这段代码创建了两个连接,输出显示了tedious正在连接,但mssql失败。

const express = require('express');
const sql = require('mssql');
const bodyParser = require('body-parser');
const app = express();

var Connection = require('tedious').Connection;

// Body Parser Middleware
app.use(bodyParser.json());

// CORS Middleware
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

// define listineng port
const PORT = 5006;

// define tedious config
var config = {
            server: "JAMBER-VR1.local",
            userName: "testuser",
            password: "testuserpass",
            database: "SQLEXPRESS",
            options: {
              encrypt: false
            }
     };

var connection = new Connection (config);

connection.on('connect', function(err){

    if(err!=null){
      console.log(err);
         console.log("not connected - tedious");
    }
    else{
          console.log("Connected - tedious")
          connection.close();
    };
});


// Define SQL config

const dbConfig = {
  user: 'testuser',
  password: 'testuserpass',
  server: 'JAMBER-VR1.local',
  database: 'SQLEXPRESS',
  // port: 1433,
  // logging: true,
  options: {encrypt: false},
  pool: {
    max: 100,
    min: 0,
    idleTimeoutMillis: 30000
  }
}

const executeQuery = async () => {
  try {
    let pool = await sql.connect(dbConfig);
    console.log("pool connected - mssql");
    let result = await pool.request()
      .input('input_parameter', sql.Int, value)
      .query('select * from donor')

    console.log("Result: ", result);
  } catch (err) {
    console.log("Error: ", err);
  }
}

executeQuery();

我遇到了以下错误: [nodemon] 启动 node index.js 正在运行在端口5006上 已连接 - tedious 错误:{ ConnectionError: 用户'testuser'登录失败。 在Connection.tedious.once.err中的 /Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/mssql/lib/tedious.js:237:17 在Object.onceWrapper (events.js:273:13)中 在Connection.emit (events.js:182:13)中 在Connection.processLogin7Response (/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/connection.js:1292:16) 在Connection.message (/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/connection.js:1805:14) 在Connection.dispatchEvent (/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/connection.js:1004:38) 在MessageIO. (/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/connection.js:884:18) 在MessageIO.emit (events.js:182:13) 在ReadablePacketStream. (/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/message-io.js:104:16) 在ReadablePacketStream.emit (events.js:182:13) 代码:'ELOGIN', 原始错误: { ConnectionError: 用户'testuser'登录失败。 在ConnectionError(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/errors.js:12:12) 在Parser.(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/connection.js:628:33) 在Parser.emit(events.js:182:13) 在Parser.(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/token/token-stream-parser.js:54:15) 在Parser.emit(events.js:182:13) 在addChunk(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/readable-stream/lib/_stream_readable.js:291:12) 在readableAddChunk(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/readable-stream/lib/_stream_readable.js:278:11) 在Parser.Readable.push(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/readable-stream/lib/_stream_readable.js:245:10) 在Parser.Transform.push(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/readable-stream/lib/_stream_transform.js:148:32) 在doneParsing(/Users/jordanszymczyk/Code/TRTL/server_sql/node_modules/tedious/lib/token/stream-parser.js:110:18) 消息:'用户'testuser'登录失败。', 代码:'ELOGIN'}, 名称:'ConnectionError'

你可以看到控制台输出了"Connected - tedious",然后紧接着就是mssql错误。 我也尝试使用本地IP,但结果相同。 通过sqlcmd测试则正常。
3个回答

4
不要忘记激活双重认证。

enter image description here


2

SQLEXPRESS 是您的 SQL Server Express 服务器实例的名称(即- Server)。我在您的代码中没有看到它,但我猜想数据库名称不是 SQLEXPRESS?

在您的 mssql 连接 dbConfig 中,尝试将 Database 更改为您在 SQL Express 实例上创建的数据库的真实名称。


这个繁琐的连接没有失败...我无法让mssql连接工作。但是,mssql的dbConfig实际上是相同的。如果像终端那样运行以下命令可以正常连接...sqlcmd -S JAMBER-VR1.local\SQLEXPRESS,1433 -U testuser -P testuserpass,我的dbConfig应该是什么样子的? - Jordan Szymczyk
关于数据库名称...它是该用户的默认设置,所以我认为这就是为什么我在使用sqlcmd登录时不需要它的原因。但是包括数据库的以下命令可以正常工作。sqlcmd -S JAMBER-VR1.local\SQLEXPRESS.donor.dbo.donor,1433 -U testuser -P testuserpass - Jordan Szymczyk
明白了!必须完全删除SQLEXPRESS。将服务器设置为'SERVERNAME.local',数据库设置为'dbname'。虽然很简单,但我的问题在于试图以某种方式将SQLEXPRESS纳入连接中。 - Jordan Szymczyk

0

固定的dgconfig如下:

const dbConfig = {
  user: 'testuser',
  password: 'testuserpass',
  server: 'JAMBER-VR1.local',
  database: 'donor',
  options: {encrypt: false},
  pool: {
    max: 100,
    min: 0,
    idleTimeoutMillis: 30000
  }
}

移除了SQLEXPRESS并将其替换为数据库名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接