Tedious: SQL2014に対するWindows認証の問題

作成日 2015年02月13日  ·  28コメント  ·  ソース: tediousjs/tedious

退屈で、SQL Server2014へのWindows認証接続を取得することからこれを整理しようとしているのは初めてです-

面倒なパッケージバージョン:1.9.0
ノードバージョン12

//設定設定
var config = {
userName: "ユーザー"、
パスワード:「MyPass」、
サーバー:「MyServer」、
ドメイン:「MyDomian」、
オプション:{
データベース:「myDb」
}、
デバッグ:{
パケット:true、
データ:true、
ペイロード:true、
トークン:true、
ログ:true
}
};

1433ポートに接続できることを確認しました。テスト用に、これはローカルで実行されているSQLサーバーです。

スタックトレース:
D:\ Development \ Node \ node-sql \ index.js:25
エラーをスローします。
^
ConnectionError:ログインに失敗しました。
ログインは信頼できないドメインからのものであり、
Windows認証。
パーサーで。
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ connection.js:447:37)
Parser.emitで(events.js:107:17)
Parser.nextTokenで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ token \ token-stream-parser.js:91:18)
Parser.addBufferで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ token \ token-stream-parser.js:68:17)
Connection.sendDataToTokenStreamParserで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ connection.js:879:35)
Connection.STATE.SENT_NTLM_RESPONSE.events.dataで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ connection.js:226:23)
Connection.dispatchEventで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ connection.js:742:59)
MessageIOで。
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ connection.js:670:22)
MessageIO.emitで(events.js:107:17)
MessageIO.eventDataで
(D:\ Development \ Node \ node-sql \ node_modules \ tedious \ lib \ message-io.js:56:12)

正しい方向へのプッシュはありがたいです。

feature-request

最も参考になるコメント

@arthurschreiber @arobsonOMGそれはついに機能します!!! タイムリーなサポートをありがとうございました!!! これが私の最終的な構成です:

var config = {
    "userName": "user.name",
    "password": "password",
    "server": "servername",
    "domain": "DOMAIN_NAME_CAPITALIZED_AND_NOT_FQDM",
    "options": {
        "encrypt": false
    }
};

仮想マシンでSQLServer 2008R2を使用しています。 スクリプトは、データベースをホストするのと同じサーバー上にあります。

これをどこかのドキュメントに追加できれば素晴らしいと思います

全てのコメント28件

私の知る限り、私がPRした修正は、まだリリースされていません。 表示されているエラーメッセージは、特定のセキュリティ制限が設定されているAD上のSQLサーバーに接続しようとしたものと一致しています。 NTLMサポートを追加する最初のパスではこれを考慮していませんでしたが、新しくマージされた動作は考慮に入れる必要があります。 NPMがマスターブランチからこのlibをインストールしようとしましたか?

そこで、マスターブランチから最新のものを取得し、npmが実際にlibフォルダーを除外したため、ローカルでコンパイルしましたが、それでも喜びはありません。 これを、npmにあるコーヒー1.7とは少し異なる方法でコンパイルしたコーヒー1.9でコンパイルしました。

これを少し続けます-他のアイデアはありますか?

AzureのSQLAuthでこれを機能させることはできましたが、Windows Authでこれを機能させることはできませんでした-npmに変更がない現在のソースで試しましたが、それでも機能しませんでしたが、コーヒースクリプトの作成経験が不足していることについて-

コーヒーバージョン1.9を使用-ソースに対して以下を実行しました。
Coffee --copile --output lib srcそして、コンパイルされたライブラリをnode_modules / tediousに配置しますが、それでも実行できません-

1.10.0リリースを試すことができますか?

退屈な最新バージョンでも同じ問題が発生しています。 ワークステーションの名前を指定しましたが、「ログインは信頼されていないドメインからのものであり、Windows認証では使用できません」と同じように表示されます。

ドメインの一部ではないコンピューターからWindowsドメインユーザーを認証できるようにするドメイン設定に関して、私が見逃しているものはありますか? Ubuntu14.04インスタンスからWindows2012 R2Server上のSQLServer2014へのドメインユーザーを認証しようとしています。

@arobson別のコメントで、これと同じ問題が発生しており、PRがマージされた後、本番環境で正常に認証できたとのことです。 退屈なこと以外にやらなければならないことはありましたか?

最新の退屈なリリースでこの問題がまだ発生していますか?

@arthurschreiber試したところ、「ログインは信頼できないドメインからのものであり、Windows認証では使用できません」というメッセージが表示されます。 エラーメッセージ。

@arobsonには解決策があるように見えましたが、どこにも見つかりません。

ドメイン資格情報を使用してSQL2014インスタンスに接続するために使用する必要があるオプションについてのヘルプをいただければ幸いです。

この問題もあります。 SQLユーザーでログインできますが、Windows認証ではログインできません。残念ながら、私のdbチームは永続的なSQLユーザーを許可しないため、Windows認証を使用する必要があります。 これらは私の設定オプションです:

var config = {
サーバー: 'SERVERNAME'、
userName:user '、
パスワード: 'パスワード'、
ドメイン: 'FQDN.DOMAIN.COM'
、オプション:{
デバッグ:{
パケット:true、
データ:true、
ペイロード:true、
トークン:false、
ログ:true
}、
データベース: 'DB_NAME'
}
};

これは私が得ているエラーです:

{[ConnectionError:ログインに失敗しました。 ログインは信頼できないドメインからのものであり、Windows認証では使用できません。]
名前: 'ConnectionError'、
メッセージ: 'ログインに失敗しました。 ログインは信頼できないドメインからのものであり、Windows認証では使用できません。
コード: 'ELOGIN'}
{[RequestError:リクエストはLoggedIn状態でのみ行うことができ、SentNTLMResponse状態では行うことができません]
名前: 'RequestError'、
メッセージ: 'リクエストはLoggedIn状態でのみ行うことができ、SentNTLMResponse状態では行うことができません'、
コード: 'EINVALIDSTATE'}
{[ConnectionError:ログインに失敗しました。 ログインは信頼できないドメインからのものであり、Windows認証では使用できません。]
名前: 'ConnectionError'、
メッセージ: 'ログインに失敗しました。 ログインは信頼できないドメインからのものであり、Windows認証では使用できません。
コード: 'ELOGIN'}
{[RequestError:リクエストはLoggedIn状態でのみ行うことができ、SentNTLMResponse状態では行うことができません]
名前: 'RequestError'、
メッセージ: 'リクエストはLoggedIn状態でのみ行うことができ、SentNTLMResponse状態では行うことができません'、
コード: 'EINVALIDSTATE'}

設定に問題がありますか?

いいえ、設定に問題はないと思います。 SQL Server 2014を自分のマシンにインストールして、これを引き起こしている原因を確認する必要があります。 認証スキームで何かが変更された可能性がありますが、まだサポートされていません。

何ができるか見ていきます。

@ jgornick @ stefanTHD-これが私たちの環境で気付いたいくつかの癖です。 NTLMは、安全性の低いNTLM機能を防ぐ非常に厳格なポリシーが適用されている場合でも、2012年と2014年に対してAD外のLinuxボックスから私たちのために働いてきました。

1-ドメインプロパティでFQDNを使用しないでください。 「company.com」の場合は「COMPANY」を使用してください
2-キャピタライゼーションも重要なようです。 オールキャップドメイン名で成功しました
3 -_「user.name」だけで修飾されたユーザー名(つまり「[email protected]」)を使用しないでください

ご参考までに

NTLMドキュメントは古く、Microsoftから提供されていません。 私が見つけたドキュメントはそれらのいくつかが何のためにあるのかを説明していなかったので、私は特定のバイナリフラグをいじくり回さなければなりませんでした。 私の最初のPRは、ワークステーション上のSQL Serverに対するNTLMに対してのみ機能しました。これは、ADにNTLM機能の一部を無効にするポリシーがあったためです。

次のステップ

上記の3つのヒントが機能しない場合は、Even Viewer / SQLLogsを介して失敗したログインエントリを見つけることができれば非常に役立ちます。 「信頼できないドメイン」は、実際には、攻撃者が要求が拒否された理由を理解しにくくするためにMSFTが提供する一般的なエラーです。 そのエラーをグーグルで検索して、そのエラーが誤解を招くと不平を言っているNTLMをサポートしようとしている他のOSSライブラリを見つけることもできます。

私はあなたがこれを解決するのを手伝いたいです、Tediousは素晴らしいです、そして@arthurschreiberの最近の貢献はそれをさらに良くしました。

NTLM認証については、MicrosoftのMS-NLMPドキュメントで説明されています。 それを読み通して、これまでの退屈な実装と比較する時間を見つけることができるかどうかを確認します。

@arthurschreiber @arobsonOMGそれはついに機能します!!! タイムリーなサポートをありがとうございました!!! これが私の最終的な構成です:

var config = {
    "userName": "user.name",
    "password": "password",
    "server": "servername",
    "domain": "DOMAIN_NAME_CAPITALIZED_AND_NOT_FQDM",
    "options": {
        "encrypt": false
    }
};

仮想マシンでSQLServer 2008R2を使用しています。 スクリプトは、データベースをホストするのと同じサーバー上にあります。

これをどこかのドキュメントに追加できれば素晴らしいと思います

いいね! NTLM認証が暗号化で機能しないという事実はコードのバグであり、すぐに修正を提供します(そのための時間があれば)。

確かに、ドメインを大文字にすることで問題は解決します。

https://github.com/pekim/tedious/pull/367暗号化で機能しないNTLM認証の修正です。

この議論は、LinuxからのWindows認証の使用に言及していますか? たとえば、RedHat?

@piseesはい、修正を加えた暗号化を使用してWindowsAuthを使用してFedora22からSQLサーバーに接続しています。

@NamTThaiでもまったく同じ問題が発生しました。これを読み、説明されているようにドメインを変更した後、問題は発生していません。 (すべて大文字で、ドメインの最初の部分のみ。ドットの後の部分は省略してください)

私はマイクロソフトに所属しており、退屈な作業への貢献を支援したいと考えています。
この問題でまだ未解決のものはありますか、それともすべて解決されていますか?

@tvrprasad回避策があると思いますが、回避策が機能する理由を私たち全員が理解しているとは限りません。 :)

@benzou回避策は、8/15のこのスレッドで@arobsonによって説明されたものですか?
この問題が解決されるのを妨げているのは何ですか? 私はこれを閉じるのを手伝うことができるかもしれません...どういうわけか:)

@tvrprasadこれについてはもっと良いドキュメントが必要だと思います。

ドキュメントはこのリポジトリのgh-pagesブランチに保存されていますが、コードベースの外部で保守されているため、非常に簡単に古くなり、保守は手間がかかります。 😞

@ tvrprasad -NTLMサポートを追加して以来、面倒でリポジトリに報告されている問題は、ドメインが小文字またはFQDNとして指定されていることが原因でした。 このための1つの解決策は、次のようなPRでフォローアップすることです。

  1. ドメインを大文字に変換します(最初からそれを行うべきでした)
  2. .でドメインを分割し、最初のセグメントのみを使用します

私は確かにNTLMの専門家ではありませんが、MSSQLとNodeのファンであり、これが本当に必要だったので、運用チームの助けを借りて、NTLMのドキュメントやその他の実装を調べて、多数のSQLServerに対してテストします。バージョンがあるので、実装については比較的自信があります。 そこにあるものに対して提供できる分析と改善は素晴らしいでしょう。 私がフォローしたドキュメントは2007年のものだったので、何を見逃したのかわかりません😄

NTLMビットについて回答できる具体的な質問がある場合はお知らせください。

@ arobson -FDQNは私にとってはうまくいくようですが、それでも大文字だけです。 簡単に追跡できるように大文字に変換する別の問題を作成しました-https://github.com/tediousjs/tedious/issues/414。 そのためのPRをまとめます。 小文字が機能しない理由を学習しようと思います。

@ arthurschreiber-このトピックについて少なくとも1つのPRを取得できたら、ドキュメントを最新の状態に保つのを手伝うようにします。これにより、理解が深まります。 ドキュメントが不足している他の領域がある場合は、私に知らせてください。 手伝おうと思います。

認証に関連する他のいくつかの問題を開きました。 それらについての考えをいただければ幸いです。
https://github.com/tediousjs/tedious/issues/415
https://github.com/tediousjs/tedious/issues/416

皆さん-私はWindows統合認証の実装のためのPRを持っています-https://github.com/tediousjs/tedious/pull/497。 これはユーザー名やパスワードを必要とせず、ユーザーのログイン資格情報を使用します。

試してフィードバックをいただければ幸いです。 コミュニティと協力してこの機能を利用できることを楽しみにしています。

こんにちは誰かが私を助けることができれば私はMSSQLServerデータベース12でmssqlノード4.1を使用して接続しようとしました、私はすでに多くのことを試しましたが、接続しません

私の接続は以下に準拠しています:

x

私は試してみます:

const stringConnect = 'サーバー= ADMIN-CCE \ admin:1433; データベース= GRD; ユーザーID = admin-cce \ admin; '
DATABASE.connect(stringConnect)
.then(conn => {
global.conn = conn;
console.log( 'GRDに接続されています');
})
.catch(err => console.error( connection error mssql $ {stringConnect} - $ {err} ));

module.exports = DATABASE;

*リターンエラー**
mssql接続エラーサーバー= ADMIN-CCE \ admin:1433; データベース= GRD; ユーザーID = admin-cce \ admin; -ConnectionError:管理者のポート:1433がADMIN-CCEに見つかりません

すでに他の方法を試しましたが、成功しませんでした! 見て:

var config = {
サーバー: "ADMIN-CCE \ MSSQLSERVER"、
データベース:「GRD」、
ポート:1433、
ユーザー: 'admin-cce \ admin'、
デバッグ:true、
オプション:{
暗号化:false、
trustedConnection:true
}
};

DATABASE.connect(config、function(err){
if(err)
{{
console.log(err)
}
そうしないと
console.log( '接続済み.....')
});

module.exports = DATABASE;

*エラーを返します*
メッセージ:
'ADMIN-CCEへの接続に失敗しました:未定義-接続できませんでした(シーケンス)'、
コード: 'ESOCKET'}、
名前: 'ConnectionError'}

ねえ@allexon 、退屈なのはまだWindows統合認証をサポートしていません。詳細はhttps://github.com/tediousjs/tedious/issues/660にあります。

面倒なSQLサーバーウィンドウ認証はまだサポートされていますか?

このページは役に立ちましたか?
0 / 5 - 0 評価