java.sql.SQLException:I / O错误:SSO失败:本机SSPI库

时间:2010-11-18 21:53:34

标签: java sql sql-server jdbc single-sign-on

我有两个Web应用程序需要在Tomcat 6,MS SQL 2008和JTDS-1.2.2上作为驱动程序运行。

如果我只启动一个Web应用程序,一切正常,但是一旦我启动第二个,我就会收到以下错误(订单无关紧要):

java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library

当然,图书馆ntlmauth.dll位于C:\WINDOWS\system32

之下

似乎启动的第二个应用程序无法找到单个登录的ntlmauth.dll

4 个答案:

答案 0 :(得分:18)

我通过更改

中的网址来解决这个问题
jdbc:jtds:sqlserver://host_server:1433/Database_name

jdbc:jtds:sqlserver://host_server:1433/Database_name;user=XXX;password=YYY

显然,“当URL [不]包含用户和密码属性时,系统使用Windows身份验证方法,并且出现”未找到SSPI本机库“错误。”

答案 1 :(得分:17)

这是解决方案:

下载jTDS driver,将其解压缩,然后将x86\SSO\ntlmauth.dll复制到jdk\jre\bin

这可以解决您的问题。

修改

如果没有安装JDK,我的路径是C:\Program Files\Java\jre7\bin\ntlmauth.dll

jTDS必须能够加载本机SPPI库(ntlmauth.dll)。将此DLL放在系统路径中的任何位置(由PATH系统变量定义)并且您已完成设置。

答案 2 :(得分:2)

如果您尝试在使用JTDS驱动程序和Windows身份验证访问SQL Server的同一服务器上运行两个(或更多)Tomcat应用程序,那么Chris White提供的非常有用的答案是here。< / p>

Chris的答案与sqljdbc_auth.dll有关,但JTDS驱动程序和ntlmauth.dll的建议相同:

  1. 将ntlmauth.dll放入tomcat 7.0\bin目录。实际上,我相信您可以将ntlmauth.dll放入系统路径或Java jre\bin目录中的任何目录。
  2. 重要的是,不要使用JTDS驱动程序将JTDS jar捆绑到任何Tomcat应用程序的war文件中。相反,将一个副本放在Tomcat\lib目录中,Tomcat将加载该副本并将其提供给所有应用程序。

答案 3 :(得分:2)

如果你在64位窗口但运行32位java(程序文件x86中的那个),那么你需要32位ntlmauth dll而不是你可能期望的64位。