2015-11-14 18 views
12

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 è:Come connettersi a SQL Server con autenticazione Windows da Node.JS utilizzando il modulo 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' } 

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

dove hai inserito il nome utente? –

+0

Non inserisco un nome utente poiché il metodo di autenticazione del mio server SQL è Windows Authentication. In .Net questo è come definirei la mia stringa di connessione: "Server = localhost; Integrated Security = SSPI; Database = mydatabase". Non sei sicuro di come implementare qualcosa di simile a questo in Node.js. –

+0

Oh e l'ho provato con l'autenticazione del server SQL, usando l'account sa, e funziona. Ma quello di cui ho bisogno è che funzioni con l'autenticazione di Windows. –

risposta

15

Non sono mai stato in grado di ottenere mssql + finestre autenticazione a lavorare per uno dei miei progetti. Prova edge e edge-sql - ha funzionato per me. Be sure you install all the required packages.

https://github.com/tjanczuk/edge

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

Da lì, è piuttosto 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

Beh ... 10 giorni dopo la mia risposta originale, a quanto pare mssql aggiunto di Windows Auth al pacchetto. Hanno sentito le nostre grida :) See here. Non l'ho ancora testato, ma è ufficialmente nel mio backlog per testare l'integrazione. Riferirò

FWTW, se mssql adatto alle proprie esigenze, vorrei andare con esso, come 1) edge-sql è stato sospeso per 2 anni e 2) il contributo primario ha detto che ha lasciato progetti come questo "in the caring hands of Microsoft", dal momento che non è più ci lavora

EDIT 2

Questo mantiene sempre upvotes e ci sono commenti dicendo alcuni degli esempi di codice delle altre risposte o non funzionano o non funzionano su Windows.

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

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

Non ho avuto molta fortuna con Windows Auth su [mssql] (https://github.com/patriksimek/node-mssql). –

+0

funziona su Windows ma non funziona su Linux. – previousdeveloper

+0

@getglad Si può fornire un esempio specifico per la stringa di connessione con valori effettivi? Sono un po 'confuso sul fatto che {} dovrebbe essere lì in pratica, sto ricevendo "TypeError: server non valido: non definito" –

-1

ho lottato per la connessione con il server mssql che corrono nel server Windows remoto utilizzando finestre modalità di autenticazione. Poi ho trovato la soluzione appena usata come sotto il codice.

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

stai fornendo la password di Windows? non dovremmo fornire la password di Windows per l'autenticazione della finestra. dovrebbe prendere automaticamente quale utente sta eseguendo l'app .. – Raghavendra

+0

nodo mssql modulo non hanno la possibilità di accedere con autenticazione di Windows per motivi di implementazione ho potuto trovare l'unico modo in cui e per ulteriori dettagli si riferiscono al problema hub git. https://github.com/patriksimek/node-mssql/issues/338 – MAFAIZ

11

Poiché questa è una risposta abbastanza visibile, volevo aggiungere uno snippet di codice che ha funzionato per me con Trusted Connection. Ottenuto da getglad's risposta modificata.

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 di fiducia, sono stato in grado di eseguire le stored procedure, registrare l'uscita, e chiudere la connessione senza problemi, e msnodesqlv8 è stata aggiornata più di recente rispetto a tutti gli altri piloti (ultima versione era ottobre 2016 dall'11/3/2016), quindi sembra essere una scelta sicura.

Ed ecco un esempio utilizzando [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, ad esempio here. 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 
}); 
+0

Mi rendo conto che questo è un commento più vecchio, ma quando provo il codice di cui sopra sto ricevendo "Accesso non riuscito per l'utente". " Non sono sicuro del motivo per cui non sta tirando le informazioni di Windows. – Holt

+0

@Holt - Sono sempre riuscito a farlo funzionare utilizzando una stringa di connessione effettiva. Ho aggiunto un esempio di codice alla mia risposta, se questo aiuta – getglad

6

ho lottato anche per un po 'su come utilizzare mssql + di Windows Auth, ecco come ho preso a lavorare sul mio progetto.

Come indicato nello mssql documentation, è necessario installare anche msnodesqlv8.

npm install msnodesqlv8 

Ora, sulla scia Aaron Ballard's answer, si utilizza 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 un commento sulla risposta di Aaron, come il mio è solo un complemento/aggiornamento alla sua, ma non ho abbastanza reputazione per farlo.

Problemi correlati