これは奇妙です。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() を呼び出してユーザー名、パスワードを提供する接続文字列を作成する方法がわかりません。パラメータとして。
私はこれらの退屈な問題をグーグルで検索したのは嫌いですが、手ぶらで出てきました。- ダンカン