Comment se connecter à SQL Server avec l'authentification windows à partir de Node.JS utilisant le module mssql

<!-Je ne peux pas me connecter au serveur SQL qui utilise l'authentification windows dans le noeud js. Je suis en utilisant le mssql module. Le message d'erreur est :

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

Voici mon code:

config = {
    server : "localhostMSSQLSERVER",
    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();
22
demandé sur Raghavendra 2015-11-14 18:10:01

5 réponses

je n'ai jamais été en mesure d'obtenir mssql + de l'authentification windows pour travailler pour un de mes projets. Essayez edge et edge-sql - il a travaillé pour moi. assurez-vous d'installer les paquets nécessaires.

https://github.com/tjanczuk/edge

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

A partir de là, c'est joli 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

Bien... 10 jours après ma réponse originale à cette question, apparemment mssql ajout de Windows Auth au paquet. Ils ont entendu nos cris :) Voir ici. Je ne l'ai pas encore testé, mais il est officiellement dans mon arriéré pour tester l'intégration. J'en ferai part.

FWTW, if mssql s'adapte à vos besoins, je voudrais aller avec elle, comme 1) edge-sql est en sommeil depuis 2 ans et 2) le donateur principal a dit qu'il avait les projets de gauche comme celui-ci"dans le soin des mains de Microsoft", puisqu'il n'y travaille plus.

EDIT 2

cela continue de recevoir des notes positives et il y a des commentaires disant que certains des exemples de code des autres réponses ne fonctionnent pas ou ne fonctionnent pas sur Windows.

C'est mon code en utilisant mssql, travaillant sur Windows, avec msnodesqlv8 également installés:

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
});
18
répondu getglad 2017-05-04 17:16:26

comme c'est une réponse assez visible, j'ai voulu ajouter un extrait de code qui a fonctionné pour moi avec une connexion de confiance. Obtenu à partir de getglad édité réponse.

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

en utilisant la connexion de confiance, j'ai pu exécuter les procédures stockées, enregistrer la sortie, et fermer la connexion sans aucun problème, et msnodesqlv8 a été mis à jour plus récemment que tous les autres pilotes (la dernière version date d'octobre 2016 et date du 03/11/2016), de sorte que cela semble être un choix sécuritaire.

Et voici un exemple d'utilisation mssql@4.0.4. Les seuls changements sont le require initial, qui tirent dans msnodesqlv8 de l'intérieur de mssql, et sql.La connexion est maintenant sql.ConnectionPool. Vous devrez également modifier vos appels de procédure stockés puisque la réponse est différente, noté ici. C'est la réponse de Jon puisqu'il a mis à jour la mienne avant moi!

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
});
18
répondu Aaron Ballard 2017-12-07 22:03:04

moi aussi j'ai eu du mal pendant un certain temps sur la façon d'utiliser MSSQL + Windows Auth, voici comment je l'ai obtenu pour travailler sur mon projet.

Comme indiqué dans le MSSQL documentation, vous avez besoin msnodesqlv8 installé aussi.

npm install msnodesqlv8

Maintenant, dans la suite réponse D'Aaron Ballard, vous l'utilisez comme ceci:

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

comme note, j'ai essayé d'ajouter ceci comme commentaire sur la réponse D'Aaron, car la mienne est juste un complément / mise à jour à la sienne, mais je ne avoir assez de réputation pour le faire.

9
répondu Jon Koala 2017-05-23 12:18:07

j'ai essayé beaucoup de variation et c'est ma solution complète.

Je suis à l'aide de SQL server Express.

Je me connecte, en premier lieu, à la maître base de données uniquement.

Vous avez seulement BESOIN de changement "YOURINSTANCE\ \ SQLEXPRESS".

(Assurez-vous de maintenir le double-slash ci-dessus!!!)

Je suis à l'aide de SÉCURITÉ INTÉGRÉE trop.

La requête ne repose sur rien du tout (dans votre base de données).

Vous devez ajouter vos paquets de noeuds

  = = > NPM INSTALL MSSQL et

  = = > NPM INSTALL msnodesqlv8

Avec un peu de chance, vos problèmes de connexion appartiendront au passé.

Peut-être.

S'il vous plaît.

// 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);
});
0
répondu Dave 2018-05-21 10:06:18

j'ai eu du mal à me connecter avec le serveur mssql qui tourne dans le serveur windows distant en utilisant mode d'authentification windows . Puis j'ai trouvé la solution juste utilisée comme code ci-dessous.

sql.connect("Data Source=172.25.x.x,1433;User Id=CSLx\Name;Password=xxxxxx1234;Initial Catalog=giveTHedataabseNamel;Integrated Security=True",function(err){ }
-1
répondu MAFAIZ 2016-08-24 12:54:11