web-dev-qa-db-ja.com

mssqlモジュールを使用してNode.JSからWindows認証でSQL Serverに接続する方法

こんにちは、ノードjsでWindows認証を使用しているSQLサーバーに接続できません。 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' }

ここに私のコードがあります:

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();
33
F0r3v3r-A-N00b

これはかなり目に見える答えなので、Trusted Connectionで機能するコードスニペットを追加したかったのです。 getgladの 編集済みの回答から取得しました。

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

信頼できる接続を使用して、ストアドプロシージャを実行し、出力をログに記録し、問題なく接続を閉じることができました。 msnodesqlv8 は、その他のドライバー(最新リリースは2016年11月3日の2016年10月でした)ので、これも安全な選択のようです。

そして、mssql @ 4.0.4を使用した例を次に示します。唯一の変更は、mssql内からmsnodesqlv8を取り込む最初のrequireであり、sql.Connectionはsql.ConnectionPoolになりました。 here で示されているように、応答が異なるため、ストアドプロシージャコールも変更する必要があります。ジョンが私の前に私のものを更新して以来、ジョンの答えに感謝します!

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
});
27
Aaron Ballard

私のプロジェクトでmssql + windows authを使用することはできませんでした。 EdgeEdge-sqlを試してください-それは私のために働いています。 必ずall必要なパッケージをインストールしてください

https://github.com/tjanczuk/Edge

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

そこから、それはかなりスチームラインです。

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 [〜#〜]

さて...元の回答の10日後、明らかにmssqlがWindows Authをパッケージに追加しました。彼らは私たちの叫びを聞いた:) こちらを参照 。私はまだテストしていませんが、公式に統合をテストするためのバックログにあります。報告します。

FWTW、mssqlがあなたのニーズに合うなら、私はそれと一緒に行きます。1)Edge-sqlは2年間休眠しており、2)主な貢献者は彼がこのようなプロジェクトを去ったと言っています Microsoftの思いやりのある手で "、彼はそこで働いていないので。

EDIT 2

これは賛成票を集め続け、他の回答のコード例の一部が機能していないか、Windowsで機能していないというコメントがあります。

これはmssqlを使用する私のコードで、Windowsで動作し、msnodesqlv8もインストールされています:

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

私はmssql + Windows Authの使用方法についても長い間苦労してきましたが、ここでプロジェクトで動作するようになりました。

mssql documentation で指摘されているように、msnodesqlv8もインストールする必要があります。

npm install msnodesqlv8

Aaron Ballard's answer に続いて、次のように使用します。

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

注として、私はこれをアーロンの答えのコメントとして追加しようとしました。私のものは彼の補完/更新にすぎませんが、それを行うには十分な評判がありません。

18
Jon Koala

多くのバリエーションを試しましたが、これが私の完全なソリューションです。
私はSQL Server Expressを使用しています。
最初のインスタンスでは、[〜#〜] master [〜#〜]データベースのみに接続しています。
YOURINSTANCE \\ SQLEXPRESS」のみを変更する必要があります。
(上記の二重スラッシュを必ず維持してください!!!)
私も統合セキュリティを使用しています。
クエリは(データベース内の)何にも依存していません。
ノードパッケージを追加する必要があります
==> NPM INSTALL MSSQLおよび
==> NPM INSTALL msnodesqlv8
うまくいけば、接続の問題は過去のものになるでしょう。
多分。
お願いします。

// 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);
});
5
Dave

以下のコードは私のために働いています......

const sql = require('mssql/msnodesqlv8')
// config for your database
var config = {
    driver: 'msnodesqlv8',
    server: 'serverNAme\\SQLEXPRESS', 
    database: 'Learn' , 
    options: {
        trustedConnection: true
    }
};
0
vandana agrawal

(構成オブジェクトではなく)接続文字列を使用したmsnodesqlv8(Windows環境に限定)を使用した場合にのみ、信頼できる接続を取得できました。

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

Configにdomain: "DNAME"を追加しただけなので、この構成により、Windows認証でMS SQLに接続できます。

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