0

これは奇妙です。Windows用に構成された統合認証を持つSQL Server 2008インスタンスに接続しています。コードでこれを行うことで、統合認証をバイパスする方法を見つけました。

Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;username=$jboss;password=1234;domain=MYDOMAIN", "$jboss", "1234");

上記のように、jtds ドライバーで name のクラスを実行した後、完全に機能します。ただし、これを接続文字列として構成ファイルに入れる必要があります。上記を変更して、明示的にユーザー名、パスワードパラメーターを次のように送信せずに getConnection でメソッド呼び出しを使用するようにします。

 Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;username=$jboss;password=1234;domain=MYDOMAIN");

Windows認証を使用して認証しようとしているため、ネイティブSSPIライブラリがロードされていないという例外が発生します。したがって、jts ディストリビューションの dll を見つけて、ntlmauth.dll をビンとシステム クラスパスに追加すると、信頼できないドメイン ログイン例外が発生します。これは、ドメインで「RUNAS.exe」を実行することで解決できることがわかっていますが、元に戻ります。望ましくない統合認証を使用する必要があります。

問題は、 getConnection() メソッドでユーザー名とパスワードをパラメーターとして渡すことで、問題なく接続を作成できるのはなぜですか。そうしないと、統合認証が強制されます。コードで接続を自分で作成した場合、これは問題になりませんが、プロパティ ファイルに配置する単一の接続文字列が必要であり、getConnection() を呼び出してユーザー名、パスワードを提供する接続文字列を作成する方法がわかりません。パラメータとして。

私はこれらの退屈な問題をグーグルで検索したのは嫌いですが、手ぶらで出てきました。- ダンカン

4

1 に答える 1

2

パラメータはユーザー名であり、ユーザー名ではありません。これで問題が解決するはずです。だから試してください:

 Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;user=$jboss;password=1234;domain=MYDOMAIN");
于 2012-11-08T20:59:01.797 に答える