Подтвердить что ты не робот

Ошибка ввода-вывода: ошибка SSO: не загружена собственная библиотека SSPI

Я пытаюсь запустить следующий бит кода:

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-сервер работает на порту 1433 на машине BHX.

Сообщение об ошибке, которое я получаю, выглядит следующим образом:

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:

-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

Вы можете обнаружить что-то не так?

4b9b3361

Ответ 1

Похоже на ту же проблему, что и эта: jtds-driver-not-working-for-sql-sever-2008r2-and-denali-native-sspi-library-not

Вы должны вынуть соответствующий файл ntlmauth.dll из пакета загрузки JTDS в папку JRE bin.

Если вы работаете на 64-битной машине Windows:

  • Эта 32-разрядная DLL:

    Загрузка → > jtds-1.3.0-dist.zip → > x86 → > SSO → > ntlmauth.dll

  • Идет здесь, в этом 32-битном месте JRE:

    C:\Program Files (x86)\Java\jre7\bin

  • Эта 64-битная DLL:

    Загрузка → > jtds-1.3.0-dist.zip → > x64 → > SSO → > ntlmauth.dll

  • Идет здесь, в этом 64-битном месте JRE:

    C:\Program Files\Java\jre7\bin

Если вы работаете на 32-битной машине Windows:

  • Эта 32-разрядная DLL:

    Загрузка → > jtds-1.3.0-dist.zip → > x86 → > SSO → > ntlmauth.dll

  • Идет здесь, в этом 32-битном месте JRE:

    C:\Program Files\Java\jre7\bin

Если это не сработает, попробуйте добавить эту строку вверху вашего основного метода: System.out.println(java.lang.System.getProperty('java.library.path'));

Он должен выводить фактический путь JRE, используемый вашей программой. Убедитесь, что соответствующий файл ntlmauth.dll находится в папке JRE bin.

ПРИМЕЧАНИЕ. НЕ устанавливайте свойства подключения к домену, пользователю или паролю при использовании этого метода.

ПРИМЕЧАНИЕ. Если ваша клиентская программа Java работает на машине без окон, вам не повезло с использованием метода ntlmauth.dll. Это цитата из документации, прилагаемой к пакету загрузки JTDS: Загрузки → > jtds-1.3.0-dist.zip → > README.SSO

Начиная с версии 0.9.2 jTDS может использовать Windows учетные данные текущего пользователя, под учетной записью которого клиентская программа запуск для входа в SQL Server (одноранговый вход Windows).

С помощью Windows Single Sign On (SSO) клиенты смогут подключаться к Microsoft SQL Server без предоставления учетных данных. Это было бы динамично читать текущие учетные данные пользователя и подключаться к базе данных. при условии, что учетная запись Windows имеет достаточные права в базе данных. Это делается с использованием (только для Windows), ntlmauth.dll.

Ответ 2

У меня была аналогичная проблема, и я попытался поместить файл ntlmauth.dll в столько директорий, которые, как я думал, sql-developer будет искать его. Я, наконец, получил его, чтобы поместить файл ntlmauth.dll в папку \jdk\jre\bin в самом каталоге приложения sql-разработчика (т.е. sql-developer\jdk\jre\bin). Почему sql-разработчик ищет ntlmauth.dll в этой папке, а не системную папку выходит за рамки моего понимания. В любом случае, это сработало.

Ниже приведена ссылка на аналогичный вопрос, на который я только что ответил.

Соединение Oracle SQL Developer с Microsoft SQL Server

Ответ 3

Хорошая работа.

Но при развертывании JAR файла возникла небольшая проблема!

Я предлагаю создать папку (например, lib) и скопировать все собственные библиотеки. Наконец добавьте параметр выполнения Java:

java -jar your_jar.jar -Djava.library.path=./lib

Это было вдохновлено драйвером JTDS, который не работает для SQL Server 2008R2 и Denial Native SSPI-библиотека не загружена.

Ответ 4

Неспособность пройти аутентификационные параметры приводит к той же ошибке, поэтому в качестве альтернативы другим ответам вы также можете передать имя пользователя и пароль в строке соединения, например.

jdbc:jtds:sqlserver://localhost:1433/dbname;user=username;password=s3cr3t

Ответ 5

Я получаю ту же ошибку даже после успешного размещения файла ntmauth.dll в JRE/bin.

Затем я попытался установить ntmauth.dll в каталог sysmtem32. При этом проблема была исправлена.

Ответ 6

Я начал работать, поместив файл ntlmauth.dll в \jdk\jre\bin. Я использую Tomcat в качестве моего сервера приложений.

Однако я заметил, что это работает только для одного веб-приложения, развернутого за раз. Если у меня одинаковые настройки для нескольких веб-приложений, все не работают, но одно. Это довольно странное поведение. Любая идея, что происходит здесь?