JDBC SQLServerException:«Этот драйвер не настроен для встроенной аутентификации».

StackOverflow https://stackoverflow.com/questions/6087819

Вопрос

Я пишу «серверное расширение» для СмартФоксСервер (СФС).В моем сценарии входа мне нужно установить соединение с MS SQL Server, что я пытаюсь сделать с помощью JDBC.Я протестировал код JDBC в своей среде отладки, и он работает нормально.

НО

Когда я помещаю серверное расширение в папку «расширения» SFS (согласно спецификации), я получаю com.microsoft.sqlserver.jdbc.SQLServerException:

«Этот драйвер не настроен для встроенной аутентификации».

Я погуглил эту ошибку и обнаружил, что обычно это связано с тем, что файл sqljdbc_auth.dll находится не в системном пути;Я скопировал этот файл в папку на моем системном пути, но он все равно не работает!

Есть еще предложения?

Это было полезно?

Решение

Существуют разные версии sqljdbc_auth.dll для разных архитектур процессоров (x86/x64/ia64).Какой из них вы используете на своем сервере SFS?

Вы должны выбрать тот, который соответствует архитектуре JVM, под которой работает SFS.Итак, если вы используете 32-разрядную версию Java на 64-разрядной машине, вам понадобится версия x86, а не версия x64.

Я раньше не пользовался SFS, поэтому не знаю, пишет ли он где-нибудь логи.Если это так, возможно, стоит взглянуть на эти журналы и посмотреть, записано ли в них что-нибудь полезное.

РЕДАКТИРОВАТЬ:Я не могу быть на 100% уверен, что SFS использует 64-битную Java только потому, что в ней не хватает C:\Program Files, а не C:\Program Files (x86).

Я нашел следующую строку в Документы СФС в разделе «Введение» > «Требования и установка».Хотя эта строка применима только к Linux, а не к Windows, можно предположить, что SFS в Windows также использует 32-битную Java:

Начиная с версии 1.5 SmartFoxServer поставляется с собственной 32-битной средой выполнения Sun Java x86.

Один из быстрых способов определить, какие версии Java у вас установлены, — ввести в cmd следующую команду: Java -version

На консоль отобразится следующее:

C:\Users\967097>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Здесь вы можете увидеть тип бит установленной версии Java.

Будет ли ваше приложение работать, если вы используете версию sqljdbc_auth.dll для x86 вместо версии x64?Если вдруг он начнет работать с x86 DLL, то SFS должна использовать 32-битную Java.

Используется ли пакетный файл для запуска SFS?Если да, то прочтение этого может помочь определить, откуда в SFS работает Java.Также обратите внимание на любые изменения в PATH.Java может загружать только библиотеки DLL в java.library.path системное свойство, а в Windows для него установлено значение PATH переменная среды.

Если вы по-прежнему не можете определить, использует ли SFS 32-разрядную или 64-разрядную версию Java, попробуйте использовать Process Explorer, чтобы просмотреть среду, в которой был запущен процесс java.exe, запускающий SFS.

Другие советы

При использовании встроенной безопасности проверки подлинности Windows

  1. Загрузите sqljdbc_6.0.8112.100_enu.exe с сайта Майкрософт
  2. Установите exe-файл (читайте инструкции в zip-архиве)
  3. скопируйте sqljdbc_4.0/enu/auth/x64/sqljdbc_auth.dll в

    Java/jre7/бин и чтобы

    Java/jre7/библиотека

После этого вы сможете подключиться к инструментам гибернации, чтобы извлечь базу данных в Data Tools.

                                                            Поместите файл .dll в папку JRE: –
Я также столкнулся с той же проблемой, и после этого я поместил sqljdbc_auth.dll (x86 или x64) в зависимости от вашей операционной системы в папку JRE, т.е. jre7/bin/file.dll, а затем запустил свой application.jar, и он работал отлично.Это сработало для меня, вы также можете попробовать это, возможно, это тоже поможет вам :)

Загрузите драйвер jdbc (версия 7.2) от Microsoft и скопируйте sqljdbc_auth.dll в папку C:\Program Files\Java\jre\bin и C:\Program Files\Java\jdk\bin.Если вы используете 32-разрядную версию Java, вам следует перейти в папку Program Files (x86).

В моем случае для решения проблемы я сделал следующее:

Загружен драйвер Microsoft JDBC 8.2 для SQL Server (zip) (находится здесь — https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15).

Затем в zip-файле я зашел в следующие папки:

sqljdbc_8.2 > enu > аутентификация > x64

и скопированный «mssql-jdbc_auth-8.2.2.x64.dll» в C:\Program Files\Java\jdk-12.0.1\bin

я столкнулся с той же проблемой для следующей строки аутентификации Windows

jdbc:sqlserver://host:1433;integratedSecurity=true

аутентификация по умолчанию = NativeAuthentication, поэтому это может зависеть от некоторых библиотек Microsoft.Чтобы это исправить, обновите схему аутентификации как NTLM, как показано ниже.

jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain

примечание:указанное имя пользователя было без домена

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top