Java I/O错误:SSO失败:未加载本机SSPI库
我正在尝试运行以下代码:Java I/O错误:SSO失败:未加载本机SSPI库,java,sql-server,jdbc,ioerror,Java,Sql Server,Jdbc,Ioerror,我正在尝试运行以下代码: import java.sql.DriverManager; public class Connect { public static void main(String[] args){ try{ String databaseDriver = "net.sourceforge.jtds.jdbc.Driver"; Class.forName(databaseDriver); }
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 server正在机器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
这是我文件的结构
**Tester**
*src*
default package
Connect.java
*JRE System Library*
*jdbc*
conf
html
IA64
x64
SSO
ntlmauth.dll
x86
你能发现什么错误吗?似乎和这个问题一样: 您应该将相应的ntlmauth.dll文件从放入JRE bin文件夹 如果您在64位Windows计算机上运行:
- 此32位DLL: 下载>>>jtds-1.3.0-dist.zip>>>x86>>>SSO>>>ntlmauth.dll
- 位于此32位JRE位置: C:\ProgramFiles(x86)\Java\jre7\bin
- 此64位DLL: 下载>>>jtds-1.3.0-dist.zip>>>x64>>>SSO>>>ntlmauth.dll
- 位于此64位JRE位置: C:\ProgramFiles\Java\jre7\bin
- 此32位DLL: 下载>>>jtds-1.3.0-dist.zip>>>x86>>>SSO>>>ntlmauth.dll
- 位于此32位JRE位置: C:\ProgramFiles\Java\jre7\bin
System.out.println(java.lang.System.getProperty('java.library.path')代码>
它应该输出程序正在使用的实际JRE路径。确保相应的ntlmauth.dll位于该JRE的bin文件夹中
注意:使用此方法时,不要设置连接的域、用户或密码属性
注意:如果Java客户机程序在非windows机器上运行,那么使用ntlmauth.dll方法就不走运了。这是对JTDS下载包附带文档的引用:Downloads>>>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
我遇到了一个类似的问题,我试图将ntlmauth.dll
文件放在我认为sql开发人员会查找的目录中。通过将ntlmauth.dll
文件放在sql developer应用程序目录本身的\jdk\jre\bin
文件夹中(即sql developer\jdk\jre\bin
),我最终实现了它。我无法理解为什么sql developer会在这个文件夹中查找ntlmauth.dll而不是系统文件夹。不管怎么说,它起了作用
下面是我刚才回答的一个类似问题的链接
干得好
但是,在部署JAR文件时有一个小问题
我建议创建一个文件夹(例如,lib
)并在中复制所有本机库。最后添加一个Java执行参数:
java -jar your_jar.jar -Djava.library.path=./lib
它的灵感来源于。我将ntlmauth.dll
文件放在\jdk\jre\bin
上,使它工作起来。我正在使用作为我的应用程序服务器
但是,我注意到,这种方法一次只适用于部署的一个web应用程序。如果我对多个web应用程序具有相同的设置,则除了一个应用程序之外,所有应用程序都会失败。这是一种很奇怪的行为。知道这里发生了什么吗?无法传递身份验证参数会导致相同的错误,因此除了其他答案之外,您还可以在连接字符串中传递用户名和密码,例如
jdbc:jtds:sqlserver://localhost:1433/dbname;user=username;password=s3cr3t
即使成功地将ntmauth.dll文件放入JRE/bin中,我也会遇到相同的错误
然后我尝试将ntmauth.dll
放入C:\Windows\System32
目录中。通过这样做,问题得到了解决。文件夹Tester
是否位于根文件夹中?Tester是我在Eclipse中创建的java项目的名称。它就在我的工作区中。请尝试指定包含ntlmauth.dllI的文件夹的绝对路径。我使用绝对路径C:\Users\nos1001\workspace\Tester\jdbc\x64\SSO进行了尝试,但我仍然收到相同的消息非常有用,但是我没有将ntlmauth.dll添加到jre目录,而是将它添加到sdk目录:C:\Program Files\Java\jdk1.7.0\u 17\bin@Rob.Kachmar为什么不建议设置域?我只是在设置了它和没有设置它的情况下运行它,两者都运行得很好。使用0xDBE?将jTDS dist zip文件中的x86\SSO\ntlmauth.dll
复制到C:\Program Files(x86)\JetBrains\0xDBE 139.795.5\jre\jre\bin
。我需要将.dll文件复制到C:\Program Files\Java\jdk1.8.0\u 77\jre\bin
中。我已将此dll放置在上述所有文件夹中,但运气不佳。我正在用Java1.7和EclipseHelios运行一个RCP应用程序。如果我包含用户名和密码,它可以正常工作,但是当我使用integratedSecurity=trueNote时会出现此错误。请注意,一旦您将文件放置在此文件夹中,您需要重新启动Oracle SQL Developer。就我个人而言,我更进一步,在类路径中包含了lib文件夹的路径。这有助于确保在编译成可执行形式时,任何本机库都与应用程序一起使用。这并不能真正回答这个问题。要提出新问题,请使用页面顶部的“提问”按钮。如果这个问题有助于提供背景,你可以链接到这个问题。这个答案最终对我有用,谢谢。此外,我还必须使用runas
命令启动sqldeveloper:runas/netonly/user:DOMAIN\user“指向sqldeveloper.exe的路径”
。
jdbc:jtds:sqlserver://localhost:1433/dbname;user=username;password=s3cr3t