web-dev-qa-db-ja.com

I / Oエラー:SSO失敗:ネイティブSSPIライブラリがロードされていません

私は次のコードを実行しようとしています:

import Java.sql.DriverManager;

public class Connect {
    public static void main(String[] args){
        try{
            String databaseDriver = "net.sourceforge.jtds.jdbc.Driver";
            Class.forName(databaseDriver);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        try{
            String url = "jdbc:jtds:sqlserver://BHX:1433/Forecast;instance=SQLEPXRESS";
            Java.sql.Connection con = DriverManager.getConnection(url);
            System.out.println("Connection");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

SQLサーバーはマシンBHXのポート1433で実行されています。

表示されるエラーメッセージは次のとおりです。

Java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the     Java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.Java:615)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.Java:352)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.Java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.Java:185)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Connect.main(Connect.Java:14)
Caused by: Java.io.IOException: SSO Failed: Native SSPI library not loaded. Check the Java.library.path system property.
at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.Java:1893)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.Java:588)
... 6 more

私はこれが通常起こる理由を読んで、同様の質問 here を見つけましたが、これはうまくいかないようです。コードを実行するときに、SSOファイルを見つけるために次の引数を含めました。

-Djava.library.path=/Tester/jdbc/x64/SSO

そして、これは私のファイルの構造です

**Tester**
   *src*
     default package
         Connect.Java
   *JRE System Library*
   *jdbc*
     conf
     html
     IA64
     x64
       SSO
        ntlmauth.dll
     x86

何か間違いを見つけられますか?

30
Nosheen

これと同じ問題のようです: jtds-driver-not-working-for-sql-sever-2008r2-and-denali-native-sspi-library-not

適切なntlmauth.dllファイルを JTDSダウンロードパッケージ からJRE binフォルダーにドロップしてください。

64ビットWindowsマシンで実行している場合:

  • この32ビットDLL:

    ダウンロード>>> jtds-1.3.0-dist.Zip >>> x86 >>> SSO >>> ntlmauth.dll

  • この32ビットJREロケーションに移動します。

    C:\ Program Files(x86)\ Java\jre7\bin

  • この64ビットDLL:

    ダウンロード>>> jtds-1.3.0-dist.Zip >>> x64 >>> SSO >>> ntlmauth.dll

  • この64ビットJREの場所に移動します。

    C:\ Program Files\Java\jre7\bin

32ビットWindowsマシンで実行している場合:

  • この32ビットDLL:

    ダウンロード>>> jtds-1.3.0-dist.Zip >>> x86 >>> SSO >>> ntlmauth.dll

  • この32ビットJREロケーションに移動します。

    C:\ Program Files\Java\jre7\bin

それでもうまくいかない場合は、メインメソッドの先頭に次の行を追加してみてください:System.out.println(Java.lang.System.getProperty('Java.library.path'));

プログラムで使用されている実際のJREパスを出力する必要があります。適切なntlmauth.dllがそのJREのbinフォルダーにあることを確認してください。

注:この方法を使用する場合は、接続のドメイン、ユーザー、またはパスワードのプロパティを設定しないでください。

注:JavaクライアントプログラムがWindows以外のマシンで実行されている場合、ntlmauth.dllメソッドを使用すると運が悪くなります。これはJTDSダウンロードに含まれているドキュメントからの引用ですパッケージ:ダウンロード>>> jtds-1.3.0-dist.Zip >>> README.SSO

リリース0.9.2以降、jTDSは、クライアントプログラムを実行しているアカウントで現在のユーザーのWindows資格情報を使用して、SQL Server(Windowsシングルサインオン)にログインできます。

Windowsシングルサインオン(SSO)クライアントを使用すると、資格情報を提供せずにMicrosoft SQL Serverに接続できます。現在のユーザーの資格情報を動的に読み取り、データベースに接続します。 Windowsアカウントがデータベースに対して十分な権限を持っている場合に限ります。これは、ネイティブ(Windowsのみ)ライブラリntlmauth.dllを使用して行われます。

63
Rob.Kachmar

同様の問題が発生したため、ntlmauth.dllファイルをできるだけ多くのディレクトリに配置し、sql-developerがそれを探しに行くと思いました。私はついにntlmauth.dllファイルの\jdk\jre\bin sql-developerアプリケーションディレクトリ自体のフォルダー(つまり、sql-developer\jdk\jre\bin)。なぜsql-developerは、システムフォルダーではなく、このフォルダー内でntlmauth.dllを探すのかは、私の理解レベルを超えています。いずれにせよ、それは働いた。

以下は、私がちょうど答えた同様の質問へのリンクです。

Microsoft SQL ServerへのOracle SQL Developer接続

6
codingknob

Ntmauth.dllファイルをJRE/binに正常に配置した後でも、同じエラーが発生します。

次に、ntmauth.dll の中に C:\Windows\System32ディレクトリ。そうすることで、問題は修正されました。

2
TechSunil

よくやった。

しかし、JARファイルをデプロイする際には少し問題があります!

フォルダー(たとえば、lib)を作成し、すべてのネイティブライブラリをコピーすることをお勧めします。最後に、Java実行パラメーター)を追加します。

Java -jar your_jar.jar -Djava.library.path=./lib

これは、JTDSドライバーがSQL Server 2008R2で機能せず、Denali Native SSPIライブラリがロードされないから着想を得たものです。

1
Said AKHROUF

認証パラメータを渡さないと同じエラーが発生するため、他の回答の代わりに、接続文字列でユーザー名とパスワードを渡すこともできます。

jdbc:jtds:sqlserver://localhost:1433/dbname;user=username;password=s3cr3t
1
isapir

ntlmauth.dllのファイル\jdk\jre\bin。アプリケーションサーバーとして Tomcat を使用しています。

しかし、これは一度にデプロイされた1つのWebアプリケーションに対してのみ機能することに気付きました。複数のWebアプリケーションに同じ設定がある場合、1つを除いてすべて失敗します。これは非常に奇妙な動作です。ここで何が起こっているのでしょうか?

0
shirjai