2015-11-14 2 views
12

Привет, Я не могу подключиться к SQL-серверу, который использует проверку подлинности Windows в узле js. Я использую модуль mssql. Сообщение об ошибке:Как подключиться к SQL Server с проверкой подлинности 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(); 
+0

где вы указали имя пользователя? –

+0

Я не ставил имя пользователя, так как мой метод проверки подлинности SQL Server является аутентификацией Windows. В .Net это так, как я бы определил свою строку подключения: «Server = localhost; Integrated Security = SSPI; Database = mydatabase». Не уверен, как реализовать что-то подобное в Node.js. –

+0

О, и я протестировал его с помощью аутентификации SQL-сервера, используя учетную запись sa, и она работает. Но мне нужно, чтобы он работал в аутентификации Windows. –

ответ

15

Я никогда не был в состоянии получить mssql + окна AUTH работать на любой из моих проектов. Попробуйте edge и edge-sql - это сработало для меня. Be sure you install all the required packages.

https://github.com/tjanczuk/edge

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

Оттуда, это довольно steamlined.

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"); 
    } 
}); 

EDIT

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

FWTW, если mssql соответствует вашим потребностям, я бы с ним, как 1) edge-sql был заморожен в течение 2-х лет и 2) основной вклад не сказал, что он оставил проекты как этот «in the caring hands of Microsoft», так как он больше не там работает.

EDIT 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 
}); 
+0

Мне не повезло с Windows Auth на [mssql] (https://github.com/patriksimek/node-mssql). –

+0

работает над окнами, но не работает linux. – previousdeveloper

+0

@getglad Пожалуйста, можете ли вы указать конкретный пример строки подключения с фактическими значениями? Я немного запутался относительно того, должен ли {} быть на практике, я получаю «TypeError: Invalid server: undefined» –

-1

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

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

вы предоставляете пароль для Windows? мы не должны предоставлять пароль Windows для проверки подлинности Windows. он должен автоматически запускать, какой пользователь запускает приложение. – Raghavendra

+0

узел mssql module не имеет возможности входа в систему с аутентификацией Windows ради реализации я мог найти только вышеописанный путь и для более подробной информации обратитесь к проблеме git hub. https://github.com/patriksimek/node-mssql/issues/338 – MAFAIZ

11

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

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 по состоянию на 11/3/2016), так что это тоже безопасный выбор.

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

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 
}); 
+0

Я понимаю, что это старый комментарий, но когда я пытаюсь выполнить вышеуказанный код, я получаю «Логин не удалось для пользователя». » Не уверен, почему он не втягивает мои данные в окна. – Holt

+0

@Holt - Мне только удалось заставить его работать, используя настоящую строку соединения. Я добавил пример кода к моему ответу, если это поможет – getglad

6

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

Как указано в mssql documentation, вам также потребуется msnodesqlv8.

npm install msnodesqlv8 

Теперь, следуя Aaron Ballard's 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) 
    }) 
}) 

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

Смежные вопросы