JDBC / IntelliJ无法加载sqljdbc_auth.dll

时间:2013-04-05 22:48:55

标签: sql-server jdbc intellij-idea

我正在尝试在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 \待办事项\ sqljdbc_4.0 \ ENU \ AUTH \ 86 \” enter image description here

运行程序会导致:

2013年4月5日下午5:43:20 com.microsoft.sqlserver.jdbc.AuthenticationJNI 警告:无法加载sqljdbc_auth.dll原因:java.library.path中没有sqljdbc_auth 此驱动程序未配置为集成身份验证。 ClientConnectionId:db8a3aa3-d84b-49d2-a7eb-64c4187a8303

我已经仔细检查了我在VM选项中指定的路径。还有其他建议吗?感谢。

1 个答案:

答案 0 :(得分:7)

看起来我对你有一些坏消息。这直接来自.tar.gz文件中包含的sqljdbc文档。在您升级文件后,请转到此帮助网页:sqljdbc_4.0 / enu / help / default.htm

在目录>>>下使用JDBC驱动程序连接到SQL Server>>>构建连接URL,请转到“使用集成身份验证连接”部分

在本节的底部有以下引用,基本上说你不能将dll方法用于非windows系统。

  

当驱动程序在非Windows操作系统上运行时,JDBC驱动程序不支持集成身份验证。从非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

如果有人弄清楚让Kerberos从非Windows机器连接到SQL Server的细节,我很乐意听取他们的意见。