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