web-dev-qa-db-fra.com

Comment se connecter à SQL Server avec l'authentification Windows à partir de Node.JS à l'aide du module mssql

Bonjour, je ne parviens pas à me connecter au serveur SQL utilisant l’authentification Windows dans le nœud js. J'utilise le module mssql. 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 : "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();
26
F0r3v3r-A-N00b

Comme cette réponse est assez visible, je voulais ajouter un extrait de code qui fonctionnait pour moi avec Trusted Connection. Nous y sommes parvenus à partir de getglad réponse modifiée.

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

À l'aide d'une connexion sécurisée, j'ai pu exécuter des procédures stockées, consigner la sortie et fermer la connexion sans problème. msnodesqlv8 a été mis à jour plus récemment que tous les autres pilotes (la dernière version date du 11 octobre 2016)/3/2016), cela semble donc être un choix sûr.

Et voici un exemple utilisant [email protected]. Les seuls changements sont les exigences initiales, qui extraient msnodesqlv8 à partir de mssql, et sql.Connection est maintenant sql.ConnectionPool. Vous devrez également modifier vos appels de procédure stockée car la réponse est différente, notez ici . Merci à la réponse de Jon puisqu'il a mis à jour le mien 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
});
23
Aaron Ballard

Je n'ai jamais réussi à obtenir mssql + windows windows pour aucun de mes projets. Essayez Edge et Edge-sql - cela a fonctionné pour moi. Assurez-vous d’installer tous les packages requis .

https://github.com/tjanczuk/Edge

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

A partir de là, c'est assez vaporeux.

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

MODIFIER

Eh bien ... 10 jours après ma réponse initiale, apparemment mssql a ajouté Windows Auth au paquet. Ils ont entendu nos cris :) Voir ici . Je ne l'ai pas encore testé, mais il est officiellement dans mon carnet de commandes pour tester l'intégration. Je vais faire rapport.

FWTW, si mssql correspond à vos besoins, je l’accepterai, car 1) Edge-sql est en sommeil depuis 2 ans et 2) le contributeur principal a dit qu’il avait laissé des projets comme celui-ci " aux mains de Microsoft " , puisqu'il n'y travaille plus.

EDIT 2

Cela continue à recevoir des votes et il y a des commentaires qui disent que certains exemples de code des autres réponses ne fonctionnent pas ou ne fonctionnent pas sous Windows.

Ceci est mon code utilisant mssql, travaillant sous Windows, avec msnodesqlv8 également installé:

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

Je me bats moi aussi depuis quelque temps sur l’utilisation de mssql + Windows Auth, voici comment je l’ai obtenu pour travailler sur mon projet.

Comme indiqué dans la documentation mssql , vous devez également installer msnodesqlv8.

npm install msnodesqlv8

Maintenant, après la réponse de 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)
    })
})

En guise de remarque, j’ai essayé d’ajouter cela en tant que commentaire sur la réponse d’Aaron, car la mienne n’est qu’un complément/une mise à jour de la sienne, mais je n’ai pas assez de réputation pour le faire.

13
Jon Koala

J'ai essayé de nombreuses variantes et c'est ma solution complète.
J'utilise SQL Server Express .
Je me connecte, dans un premier temps, à la base de donnéesMASTERuniquement.
Vous devez seulement changer " YOURINSTANCE \\ SQLEXPRESS ".
(Assurez-vous de conserver la double barre oblique ci-dessus !!!)
J'utilise INTEGRATED SECURITY aussi.
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  
Espérons que vos problèmes de connexion seront une chose du 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);
});
2
Dave

Je ne pouvais obtenir qu'une connexion sécurisée utilisant msnodesqlv8 (limité aux environnements Windows) avec une chaîne de connexion (plutôt qu'un objet config).

const sql = require("msnodesqlv8");

const connectionString = function(databaseName) {
    return "Server=.;Database=" + databaseName + ";Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}";
}

sql.query(connectionString("DatabaseName"), "SELECT * FROM dbo.Table1" , (err, recordset) => {
    if(err) {
        // Do something with the err object.
        return;
    }

    // else
    // Do something with the recordset object.
    return;
});
0
John

Je viens d'ajouter domain: "DNAME" , dans config, et cette configuration m'aide à me connecter à MS SQL avec Windows.

const config = {
            driver: 'msnodesqlv8',
            domain: "DNAME",
            user: 'username',
            password: 'pass',
            server: '7.6.225.22',
            database: 'DBNAME',
            requestTimeout: 3600000, //an hour
            options: {
                trustedConnection: true
            },
            debug: true,
            parseJSON: true
        };