2015-11-14 28 views
12

こんにちはノードjsでWindows認証を使用しているSQLサーバーに接続できません。私はmssqlモジュールを使用しています。エラーメッセージは次のとおりです。私は私のプロジェクトのいずれかのために働くmssql + Windowsの認証を取得することができたことはありませんmssqlモジュールを使用してNode.JSからWindows認証でSQL Serverに接続する方法

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

どこにユーザー名を入れましたか? –

+0

SQL Serverの認証方法がWindows認証であるため、ユーザー名を入力しません。 .Netでこれは私の接続文字列を定義する方法です: "Server = localhost;統合セキュリティ= SSPI;データベース= mydatabase"。しかし、これに似た何かをNode.jsに実装する方法はわかりません。 –

+0

ああ、私はsaアカウントを使用してSQLサーバー認証でテストしました。しかし、私はそれがWindows認証で動作する必要があります。 –

答えて

15

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

は、ここに私のコードです。試してみてくださいedgeedge-sql - それは私のために働いています。 Be sure you install all the required packages。そこから

https://github.com/tjanczuk/edge

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

、それはかなり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

うーん... 10日に私のオリジナルの答えの後、明らかにmssqlは、パッケージにWindowsの認証を追加しました。彼らは私たちの叫び声を聞いた:) See here。私はまだそれをテストしていませんが、統合をテストするために正式にバックログに入っています。私は報告する。 mssqlがニーズに合っている場合、私は1として、それで行くだろう

FWTW、)edge-sqlは2年間の休眠となっており、2)主な要因は、以来、彼はもはや彼は、この「in the caring hands of Microsoft」のようなプロジェクトを残していると述べていませんそこで働く。

EDIT 2

この保持upvotesを取得し、働いていないか、Windows上で動作していないいずれかの他の回答コード例のいくつかを言ったコメントがあります。

msnodesqlv8もインストールしてこれは、Windows上で作業し、mssqlを使用して私のコードです:

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

私は[mssql](https://github.com/patriksimek/node-mssql)のWindows Authに大したことはありませんでした。 –

+0

これはWindows上で動作していますが、Linuxでは動作しません。 – previousdeveloper

+0

@getglad実際の値で接続文字列の具体的な例を教えてください。 {TypeError:無効なサーバー:未定義 " –

-1

私はWindows認証モードを使用してリモートのWindowsサーバで実行するMSSQLサーバーに接続するために苦労。次に、以下のコードのように使用したソリューションが見つかりました。

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

Windowsパスワードを提供していますか?ウィンドウ認証のためにWindowsパスワードを提供すべきではありません。それは自動的にどのユーザーがアプリケーションを実行する必要があります.. – Raghavendra

+0

ノードmssqlモジュールは、Windows認証でログインするオプションを持っていません 私は唯一の上記の方法を見つけることができると詳細については、gitのハブの問題を参照してください。 https://github.com/patriksimek/node-mssql/issues/338 – MAFAIZ

11

これはかなり目に見える回答ですので、私は信頼できる接続で私のために働くコードスニペットを追加したいと思います。 getglad's編集された答えからそれを知りました。

信頼できる接続を使用して
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年10月でした2016年11月3日現在)、安全な選択でもあるようです。

次に、[email protected]を使用した例を示します。唯一の変更は、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 
}); 
+0

私はこれが古いコメントであることを認識していますが、上記のコードを試してみると、「ログインに失敗しました」というメッセージが表示されます。なぜ私のWindowsの情報を引き出していないのか分かりません。 – Holt

+0

@Holt - 実際の接続文字列を使って動作させることしかできませんでした。私は私の答えにコード例を追加しました。 – getglad

6

私はMSSQL +のWindows認証を使用する方法についていくつかの時間のためにあまりにも苦労してきたが、ここに私は私のプロジェクトで動作するようにそれを得た方法です。

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

、私は、アーロンの答えにコメントとしてこれを追加しようとしました彼には、しかし、私はそうする評判が十分ではありません。

関連する問題