Come connettersi a SQL Server con l’autenticazione di Windows da Node.JS usando il modulo mssql

Ciao Non riesco a connettermi al server SQL che utilizza l’autenticazione di Windows nel nodo js. Sto usando il modulo mssql. Il messaggio di errore è:

[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' } 

Ecco il mio codice:

 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(); 

Non sono mai stato in grado di ottenere l’ mssql + windows per funzionare per nessuno dei miei progetti. Prova edge e edge-sql : ha funzionato per me. Assicurati di installare tutti i pacchetti richiesti .

https://github.com/tjanczuk/edge

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

Da lì, è abbastanza al vapore.

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

MODIFICARE

Beh … 10 giorni dopo la mia risposta originale, apparentemente mssql aggiunto l’autenticazione di Windows al pacchetto. Hanno sentito le nostre grida 🙂 Vedi qui . Non l’ho ancora testato, ma è ufficialmente nel mio backlog per testare l’integrazione. Riferirò

FWTW, se mssql si adatta alle tue esigenze, ci andrei, dato che 1) edge-sql è rimasto inattivo per 2 anni e 2) il contributore principale ha detto che ha lasciato progetti come questo ” nelle mani premurose di Microsoft “, dal momento che non lavora più lì.

MODIFICA 2

Questo continua a salire i voti e ci sono commenti che dicono che alcuni degli esempi di codice di altre risposte non funzionano o non funzionano su Windows.

Questo è il mio codice usando mssql , lavorando su Windows, con msnodesqlv8 anche installato:

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

Poiché questa è una risposta abbastanza visibile, volevo aggiungere uno snippet di codice che funzionasse per me con Trusted Connection. Ottenuto dalla risposta modificata di 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 }); 

Utilizzando la connessione trusted, sono stato in grado di eseguire stored procedure, registrare l’output e chiudere la connessione senza alcun problema e msnodesqlv8 è stato aggiornato più recentemente rispetto a qualsiasi altro driver (l’ultima versione è stata pubblicata nell’ottobre 2016 a partire dall’11 / 03/2016). ), quindi sembra essere una scelta sicura.

Ed ecco un esempio usando [email protected] Le uniche modifiche sono la richiesta iniziale, che richiama msnodesqlv8 dall’interno di mssql e sql.Connection ora è sql.ConnectionPool. Sarà inoltre necessario modificare le chiamate di procedura memorizzate poiché la risposta è diversa, qui annotata. Ringraziamento alla risposta di Jon da quando ha aggiornato il mio prima di me!

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

Ho faticato troppo a lungo su come usare mssql + Windows Auth, ecco come ho potuto farlo funzionare sul mio progetto.

Come indicato nella documentazione di mssql, è necessario installare anche msnodesqlv8.

 npm install msnodesqlv8 

Ora, seguendo la risposta di Aaron Ballard , la usi in questo modo:

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

Come nota, ho cercato di aggiungere questo come commento alla risposta di Aaron, in quanto il mio è solo un complemento / aggiornamento alla sua, ma non ho abbastanza reputazione per farlo.

Ho provato molte varianti e questa è la mia soluzione completa.
Sto usando SQL server Express .
Mi sto collegando, in prima istanza, solo al database MASTER .
Hai solo bisogno di cambiare ” YOURINSTANCE \\ SQLEXPRESS “.
(Assicurati di mantenere la doppia barra sopra !!!)
Sto usando anche INTEGRATED SECURITY .
La query non si basa su nulla (nel database).
Devi aggiungere i tuoi pacchetti di nodes
==> INSTALLAZIONE NSS MSSQL e
==> INSTALLAZIONE NPM msnodesqlv8
Spero che i tuoi problemi di connessione siano un ricordo del passato.
Può essere.
Per favore.

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

Ho faticato a connettermi con il server mssql che viene eseguito nel server Windows remoto utilizzando la modalità di autenticazione di Windows . Poi ho trovato la soluzione appena usata come sotto il codice.

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