Как подключиться к SQL Server с проверкой подлинности Windows из Node.JS с использованием модуля mssql

Привет. Я не могу подключиться к SQL-серверу, который использует проверку подлинности Windows в node js. Я использую модуль mssql. Сообщение об ошибке:

[ConnectionError: Login failed for user ''. The user is not associated with a trusted SQL Server connection.]
name: 'ConnectionError',
message: 'Login failed for user \'\'. The user is not associated with a trusted SQL Server connection.',
code: 'ELOGIN' }

Вот мой код:

config = {
    server : "localhost\\MSSQLSERVER",
    database : "mydatabase",
    port : 1433
}

function loadDepts() {
    var conn = new sql.Connection(config);
    var request = sql.Request(conn);

    conn.connect(function(err) {
    if (err) {
        console.log(err);
        return;
    }

    request.query("select deptid, deptname from departments", function(err, table) {
        if (err) {
           console.log(err);
           return;
        }
        else {
           console.log(table);
        }

        conn.close();
        });
    });
}

loadDepts();

Ответ 1

Поскольку это довольно заметный ответ, я хотел добавить фрагмент кода, который работал для меня с Trusted Connection. Получил это от отредактированного ответа getglad.

const sql = require("mssql");
require("msnodesqlv8");
const conn = new sql.Connection({
  database: "db_name",
  server: "server_name",
  driver: "msnodesqlv8",
  options: {
    trustedConnection: true
  }
});
conn.connect().then(() => {
  // ... sproc call, error catching, etc
  // example: https://github.com/patriksimek/node-mssql#request
});

Используя доверенное соединение, я смог выполнить хранимые процедуры, зарегистрировать вывод и закрыть соединение без каких-либо проблем, а msnodesqlv8 был обновлен позднее, чем любой из других драйверов (последний выпуск был в октябре 2016 года по состоянию на 03.11.2016).), так что это, кажется, безопасный выбор.

А вот пример использования [email protected] Единственными изменениями являются первоначальные требования, которые извлекают msnodesqlv8 изнутри mssql, и sql.Connection теперь является sql.ConnectionPool. Вам также нужно будет изменить вызовы хранимых процедур, поскольку ответ отличается, как указано здесь. Отдайте должное Джону, так как он обновил мой раньше, чем я!

const sql = require("mssql/msnodesqlv8");
const conn = new sql.ConnectionPool({
  database: "db_name",
  server: "server_name",
  driver: "msnodesqlv8",
  options: {
    trustedConnection: true
  }
});
conn.connect().then(() => {
  // ... sproc call, error catching, etc
  // example: https://github.com/patriksimek/node-mssql#request
});

Ответ 2

Я никогда не мог получить mssql + windows auth для работы над любым из моих проектов. Попробуйте edge и edge-sql - это сработало для меня. Обязательно установите все необходимые пакеты.

https://github.com/tjanczuk/edge

https://github.com/tjanczuk/edge-sql

Оттуда это довольно круто.

var edge = require('edge');
var params = {
  connectionString: "Server=YourServer;Database=YourDB;Integrated Security=True",
  source: "SELECT TOP 20 * FROM SampleData"
};  
var getData = edge.func( 'sql', params);

getData(null, function (error, result) {
   if (error) { console.log(error); return; }
   if (result) {
    console.log(result);
   }
   else {
    console.log("No results");
   }
 });

ИЗМЕНИТЬ

Ну... Через 10 дней после моего первоначального ответа, видимо, mssql добавили Windows Auth в пакет. Они услышали наши крики:) Смотрите здесь. Я еще не тестировал его, но официально в моем отставании тестировать интеграцию. Я отчитаюсь.

FWTW, если mssql соответствует вашим потребностям, я бы пошел с ним, так как 1) edge-sql был бездействующим в течение 2 лет, а 2) основной вкладчик сказал, что он оставил проекты, подобные этому " в руках Microsoft, поскольку он больше не работает там.

РЕДАКТИРОВАТЬ 2

Это продолжает получать upvotes и есть комментарии, говорящие, что некоторые из других примеров кода ответов либо не работают, либо не работают в Windows.

Это мой код с использованием mssql, работающий в Windows, с msnodesqlv8 также установлен:

var sql = require('mssql/msnodesqlv8');
var config = {
  driver: 'msnodesqlv8',
  connectionString: 'Driver={SQL Server Native Client XX.0};Server={SERVER\\NAME};Database={dbName};Trusted_Connection={yes};',
};

sql.connect(config)
.then(function() {
 ...profit...
})
.catch(function(err) {
  // ... connect error checks
});

Ответ 3

Я тоже некоторое время боролся о том, как использовать mssql + Windows Auth, вот как я получил его для работы над моим проектом.

Как указано в документации mssql, вам также нужно установить msnodesqlv8.

npm install msnodesqlv8

Теперь, следуя Aaron Ballard answer, вы используете его следующим образом:

const sql = require('mssql/msnodesqlv8')

const pool = new sql.ConnectionPool({
  database: 'database',
  server: 'server',
  driver: 'msnodesqlv8',
  options: {
    trustedConnection: true
  }
})

pool.connect().then(() => {
  //simple query
  pool.request().query('select 1 as number', (err, result) => {
        console.dir(result)
    })
})

В качестве примечания я попытался добавить это как комментарий к ответу Аарона, поскольку мой - это просто дополнение/обновление для него, но у меня нет достаточной репутации, чтобы сделать это.

Ответ 4

Я пробовал много вариантов, и это мое полное решение.
Я использую SQL сервер Express.
Я подключаюсь, в первую очередь, только к базе данных MASTER.
Вам только нужно изменить " YOURINSTANCE\\SQLEXPRESS ".
(Не забудьте сохранить двойной слеш выше !!!)
Я тоже использую INTEGRATED SECURITY.
Запрос вообще ни на что не опирается (в вашей базе данных).
Вам нужно добавить свои пакеты узлов
==> NPM УСТАНОВИТЬ MSSQL и
==> NPM INSTALL msnodesqlv8
Надеюсь, ваши проблемы с подключением уйдут в прошлое.
Может быть.
Пожалуйста.

// More here -> https://www.npmjs.com/package/mssql
var sql = require('mssql/msnodesqlv8');
var config = {
  connectionString: 'Driver=SQL Server;Server=YOURINSTANCE\\SQLEXPRESS;Database=master;Trusted_Connection=true;'
};
sql.connect(config, err => {
  new sql.Request().query('SELECT 1 AS justAnumber', (err, result) => {
    console.log(".:The Good Place:.");
    if(err) { // SQL error, but connection OK.
      console.log("  Shirtballs: "+ err);
    } else { // All is rosey in your garden.
      console.dir(result);
    };
  });
});
sql.on('error', err => { // Connection borked.
  console.log(".:The Bad Place:.");
  console.log("  Fork: "+ err);
});

Ответ 5

Я только что добавил домен: "DNAME", в конфигурации, и в результате этот конфиг помогает мне подключиться к MS SQL с аутентификацией Windows.

const config = {
            driver: 'msnodesqlv8',
            domain: "DNAME",
            user: 'username',
            password: 'pass',
            server: '7.6.225.22',
            database: 'DBNAME',
            requestTimeout: 3600000, //an hour
            options: {
                trustedConnection: true
            },
            debug: true,
            parseJSON: true
        };

Ответ 6

Я мог получить только Доверенное соединение, работающее с использованием msnodesqlv8 (ограничено средами Windows) со строкой соединения (а не объектом конфигурации).

const sql = require("msnodesqlv8");

const connectionString = function(databaseName) {
    return "Server=.;Database=" + databaseName + ";Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}";
}

sql.query(connectionString("DatabaseName"), "SELECT * FROM dbo.Table1" , (err, recordset) => {
    if(err) {
        // Do something with the err object.
        return;
    }

    // else
    // Do something with the recordset object.
    return;
});

Ответ 7

Ниже код работает для меня......

const sql = require('mssql/msnodesqlv8')
// config for your database
var config = {
    driver: 'msnodesqlv8',
    server: 'serverNAme\\SQLEXPRESS', 
    database: 'Learn' , 
    options: {
        trustedConnection: true
    }
};

Ответ 8

У меня сработало нужно установить msnodesqlv8 и mssql. также....... :)

    var dbConfig = {
      driver: 'msnodesqlv8',  
      server: "DESKTOP-66LO4I3",
      database: "FutureHealthCareWeb",
      user: "sa",
      password: "[email protected]",
      options: {
        trustedConnection: true
    },
    debug: true,
    parseJSON: true
    }; 
    var sql = require('mssql/msnodesqlv8');

      sql.connect(dbConfig, function (err) {
      if (err) { console.log(JSON.stringify(err)+'..............') }
      else {
        console.log('Connected')
      }
    }
    );

Ответ 9

Я изо всех сил пытался подключиться к серверу mssql, который запускался на удаленном сервере Windows, используя режим проверки подлинности Windows. Затем я нашел решение, которое использовалось, как показано ниже.

sql.connect("Data Source=172.25.x.x,1433;User Id=CSLx\\Name;Password=xxxxxx1234;Initial Catalog=giveTHedataabseNamel;Integrated Security=True",function(err){ }