我正在尝试在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 \”
运行程序会导致:
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选项中指定的路径。还有其他建议吗?感谢。
答案 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的细节,我很乐意听取他们的意见。