2015-11-14 5 views
12

Hallo Ich kann keine Verbindung zu SQL-Server, der Windows-Authentifizierung in Knoten js verwendet. Ich benutze das Modul mssql. Die Fehlermeldung lautet:Verbindung mit SQL Server mit Windows-Authentifizierung von Node.JS mit mssql Modul

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

Hier ist mein Code:

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

wo hast du den Benutzernamen eingegeben? –

+0

Ich gebe keinen Benutzernamen ein, da die Authentifizierungsmethode von SQL Server die Windows-Authentifizierung ist. In .Net würde ich so meine Verbindungszeichenfolge definieren: "Server = localhost; Integrierte Sicherheit = SSPI; Database = mydatabase". Ich bin mir nicht sicher, wie man etwas Ähnliches in Node.js implementiert. –

+0

Oh, und ich habe es mit SQL Server-Authentifizierung getestet, mit dem Konto sa, und es funktioniert. Aber was ich brauche ist, dass es in der Windows-Authentifizierung funktioniert. –

Antwort

15

Ich habe noch nie mssql + Fenster Auth für alle meine Projekte bekommen konnten zu arbeiten. Versuchen Sie edge und edge-sql - es hat für mich gearbeitet. Be sure you install all the required packages.

https://github.com/tjanczuk/edge

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

Von dort ist es ziemlich 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

Nun ... 10 Tage nach meiner ersten Antwort, offenbar mssql hinzugefügt Windows-Auth zu dem Paket. Sie hörten unsere Schreie :) See here. Ich habe es noch nicht getestet, aber es ist offiziell in meinem Rückstand, die Integration zu testen. Ich werde zurück melden.

FWTW, wenn mssql Ihre Bedürfnisse paßt, würde ich mit ihm gehen, wie 1) edge-sql für 2 Jahre wurde ruhend und 2) der Hauptbeitrag hat gesagt, er Projekte links wie diese „in the caring hands of Microsoft“, da er nicht mehr hat arbeitet dort.

EDIT 2

Dies hält upvotes bekommen und es gibt Kommentare einige der anderen Antworten Codebeispiele sagen entweder nicht funktionieren oder funktionieren nicht unter Windows.

Dies ist mein Code mssql, arbeitet unter Windows, mit msnodesqlv8 auch installiert:

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

Ich hatte nicht viel Glück mit Windows Auth auf [mssql] (https://github.com/patriksimek/node-mssql). –

+0

es arbeitet auf Windows, aber nicht funktioniert Linux. – previousdeveloper

+0

@getglad Bitte könnten Sie ein konkretes Beispiel für die Verbindungszeichenfolge mit tatsächlichen Werten geben? Ich bin ein wenig verwirrt darüber, ob die {} in der Praxis da sein sollte, ich bekomme "TypeError: Ungültiger Server: undefiniert" –

-1

Ich kämpfte mit MSSQL-Server, der in Windows-Remote-Server mit Windows-Authentifizierung Modus laufen zu verbinden. Dann habe ich die Lösung wie unten beschrieben gefunden.

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

funktioniert erhalten Sie Windows-Passwort? Wir sollten kein Windows-Passwort für die Windows-Authentifizierung bereitstellen. es sollte automatisch nehmen, welcher Benutzer die app ausführt. – Raghavendra

+0

node mssql modul habe nicht die option, sich mit windows authentication einzuloggen um der implementierung willen konnte ich den obigen pfad finden und für weitere details auf das git-hub-problem verweisen. https://github.com/patriksimek/node-mssql/issues/338 – MAFAIZ

11

Da dies eine ziemlich sichtbare Antwort ist, wollte ich ein Code-Snippet hinzufügen, das bei mir mit Trusted Connection funktioniert hat. Bekomme es von getglad's bearbeitet Antwort.

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

größte Verbindung verwenden, konnte ich gespeicherte Prozeduren auszuführen, melden Sie sich die Ausgabe, und schließen Sie die Verbindung ohne Probleme, und msnodesqlv8 wurde in jüngster Zeit als eine der anderen Treiber aktualisiert (neueste Version war Oktober 2016 Stand vom 11/3/2016), so scheint dies auch eine sichere Wahl zu sein.

Und hier ist ein Beispiel mit [email protected] Die einzigen Änderungen sind die erste Anforderung, die msnodesqlv8 aus mssql zieht und sql.Connection ist sql.ConnectionPool.Sie müssen auch Ihre gespeicherten Prozeduraufrufe ändern, da die Antwort anders ist, notiert here. Verdiene Jons Antwort, seit er meine Version aktualisiert hat, bevor ich es getan habe!

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

Ich weiß, dass dies ein älterer Kommentar ist, aber wenn ich den obigen Code versuche, bekomme ich "Anmeldung fehlgeschlagen für Benutzer". Nicht sicher, warum es nicht meine Fensterinformationen einzieht. – Holt

+0

@Holt - Ich konnte es nur mithilfe einer tatsächlichen Verbindungszeichenfolge zum Laufen bringen. Ich habe meiner Antwort ein Codebeispiel hinzugefügt, falls das hilft – getglad

6

Ich habe auch seit einiger Zeit darüber, wie kämpfen, hier zu verwenden mssql + Windows-Auth, ist, wie ich es hätte auf meinem Projekt zu arbeiten.

Wie in der mssql documentation hingewiesen, müssen Sie auch msnodesqlv8 installiert.

npm install msnodesqlv8 

Jetzt, nach über Aaron Ballard's answer, verwenden Sie es wie folgt aus:

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

Als Hinweis, habe ich versucht, dies als Kommentar auf Aaron Antwort hinzuzufügen, wie ich nur eine Ergänzung/Aktualisierung ist zu seinem, aber ich habe nicht genug Ruf, um das zu tun.

Verwandte Themen