3

IntelliJ で小さなテスト プログラムを実行しようとしています。コード:

String driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url = "jdbc:sqlserver://test.test.com;integratedSecurity=true";
    String userName = "test";
    String password = "test";
    Class.forName(driverClass);
    try (Connection con = DriverManager.getConnection(url, userName, password);
         Statement st1 = con.createStatement();
         Statement st2 = con.createStatement();
    ) {
      String sql1 = "EXEC  [dbo].[Cleanup]";
      String sql2 = "EXEC  [dbo].[DetailsALL] \"DetailsALL.csv\" ";
      st1.execute(sql1);
      st2.execute(sql2);

    }catch(Exception e){
     System.out.println(e.getMessage());
    }

VM オプションに以下を追加しました。

-Djava.library.path="\Users\sgupta\IdeaProjects\todos\sqljdbc_4.0\enu\auth\x86\" ここに画像の説明を入力

プログラムを実行すると、次のようになります。

2013 年 4 月 5 日 5:43:20 PM com.microsoft.sqlserver.jdbc.AuthenticationJNI 警告: sqljdbc_auth.dll の読み込みに失敗しました 原因: java.library.path に sqljdbc_auth がありません このドライバーは、統合認証用に構成されていません。ClientConnectionId:db8a3aa3-d84b-49d2-a7eb-64c4187a8303

VM オプションで指定したパスを再確認しました。他の提案はありますか?ありがとう。

4

1 に答える 1

8

悪い知らせがあるようです。これは、.tar.gz ファイルに含まれている sqljdbc ドキュメントから直接引用したものです。ファイルをアップパックした後、次のヘルプ Web ページにアクセスしてください: sqljdbc_4.0/enu/help/default.htm

[コンテンツ] >>> [JDBC ドライバーを使用して SQL Server に接続する] >>> [接続 URL を構築する] で、「統合認証を使用して接続する」セクションに移動します。

このセクションの最後に次の引用があります。これは基本的に、Windows 以外のシステムでは dll アプローチを使用できないことを示しています。

JDBC ドライバーは、ドライバーが Windows 以外のオペレーティング システムで実行されている場合、統合認証をサポートしません。このドライバーは、Windows 以外のオペレーティング システムから SQL Server に接続するときに、ユーザー名やパスワードなどの Windows 認証資格情報を提供する機能も提供しません。このような場合、アプリケーションは代わりに SQL Server 認証を使用する必要があります。

ただし、この同じヘルプ ファイルの同等の msdn ドキュメントでは、Windows 以外のすべてのオペレーティング システムで Kerberos を使用できることが示唆されているようです。 http://msdn.microsoft.com/en-us/library/ms378428.aspx

この msdn リンクは、Kerberos プロセスの概要を示していますが、Windows 以外のマシンの詳細なセットアップについては不十分です。 http://msdn.microsoft.com/en-us/library/gg558122.aspx

Windows 以外のマシンから Kerberos を動作させて SQL Server に接続するための詳細を誰かが把握している場合は、ぜひご連絡ください。

于 2013-05-07T00:08:45.757 に答える