I/O 错误:SSO 失败:未加载本机 SSPI 库 [英] I/O Error: SSO Failed: Native SSPI library not loaded

查看:30
本文介绍了I/O 错误:SSO 失败:未加载本机 SSPI 库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试运行以下代码:

I am trying to run the following bit of code:

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 服务器在 BHX 机器的 1433 端口上运行.

My SQL server is running on port 1433 on machine BHX.

我得到的错误信息如下:

The error message I'm getting is as follows:

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

我已经阅读了为什么通常会发生这种情况并发现了一个类似的问题 此处,但这似乎不起作用.运行代码时,我使用了以下参数来定位 SSO 文件:

I've read up on why this usually occurs and found a similar question here, but this doesn't seem to work. When running the code I've inlcuded the following argument to locate the SSO file:

-Djava.library.path=/Tester/jdbc/x64/SSO

这是我的文件结构

**Tester**
   *src*
     default package
         Connect.java
   *JRE System Library*
   *jdbc*
     conf
     html
     IA64
     x64
       SSO
        ntlmauth.dll
     x86

你能发现什么问题吗?

推荐答案

似乎和这个问题一样:jtds-driver-not-working-for-sql-sever-2008r2-and-denali-native-sspi-library-not

您应该从 JTDS 下载包到您的 JRE bin 文件夹中.

You should drop the appropriate ntlmauth.dll file from the JTDS download package into your JRE bin folder.

如果您在 64 位 Windows 机器上运行:

If you're running on a 64bit Windows machine:

  • 这个 32 位 DLL:

  • This 32bit DLL:

下载 >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

Downloads >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

  • 转到此 32 位 JRE 位置:

  • Goes here in this 32bit JRE location:

    C:Program Files (x86)Javajre7in

    C:Program Files (x86)Javajre7in

  • 这个 64 位 DLL:

  • This 64bit DLL:

    下载 >>> jtds-1.3.0-dist.zip >>> x64 >>> SSO >>> ntlmauth.dll

    Downloads >>> jtds-1.3.0-dist.zip >>> x64 >>> SSO >>> ntlmauth.dll

  • 转到此 64 位 JRE 位置:

  • Goes here in this 64bit JRE location:

    C:Program FilesJavajre7in

    C:Program FilesJavajre7in

  • 如果您在 32 位 Windows 机器上运行:

    If you're running on a 32bit Windows machine:

    • 这个 32 位 DLL:

    • This 32bit DLL:

    下载 >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

    Downloads >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

  • 转到此 32 位 JRE 位置:

  • Goes here in this 32bit JRE location:

    C:Program FilesJavajre7in

    C:Program FilesJavajre7in

  • 如果这不起作用,请尝试在 main 方法的顶部添加此行:System.out.println(java.lang.System.getProperty('java.library.path'));

    If that doesn't work then try adding this line at the top of your main method: System.out.println(java.lang.System.getProperty('java.library.path'));

    它应该输出您的程序使用的实际 JRE 路径.确保相应的 ntlmauth.dll 位于该 JRE 的 bin 文件夹中.

    It should output the actual JRE path being used by your program. Make sure the appropriate ntlmauth.dll is in that JRE's bin folder.

    注意:使用此方法时,请勿设置连接的域、用户或密码属性.

    NOTE: Do NOT set the domain, user, or password properties of the connection when utilizing this method.

    注意:如果您的 Java 客户端程序在非 Windows 机器上运行,那么使用 ntlmauth.dll 方法就不走运了.这是 JTDS 下载包中包含的文档的引用:下载 >>> jtds-1.3.0-dist.zip >>> README.SSO

    NOTE: If your Java client program is running on a non-windows machine, you're out of luck using the ntlmauth.dll method. This is a quote from the documentation included with the JTDS download package: Downloads >>> jtds-1.3.0-dist.zip >>> README.SSO

    从 0.9.2 版开始 jTDS 能够使用 Windows客户端程序所在帐户的当前用户的凭据运行以登录 SQL Server(Windows 单点登录).

    Starting with release 0.9.2 jTDS is capable of using the Windows credentials of the current user under whose account the client program is running to login to SQL Server (Windows Single Sign On).

    使用 Windows 单点登录 (SSO) 客户端将能够连接到Microsoft SQL Server 无需提供凭据.它会动态地读取当前用户的凭据并连接到数据库.前提是Windows 帐户在数据库中有足够的权限.这是使用一个本机(仅限 Windows)库,ntlmauth.dll.

    Using Windows Single Sign On (SSO) clients will be able to connect to Microsoft SQL Server without providing credentials. It would dynamically read current user's credentials and connect to the database. provided that the Windows account has enough rights in the database. This is done using a native (Windows-only) library, ntlmauth.dll.

    这篇关于I/O 错误:SSO 失败:未加载本机 SSPI 库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆