JDBC SQLServerException:«Этот драйвер не настроен для встроенной аутентификации».
-
09-09-2020 - |
Вопрос
Я пишу «серверное расширение» для СмартФоксСервер (СФС).В моем сценарии входа мне нужно установить соединение с 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
- Загрузите sqljdbc_6.0.8112.100_enu.exe с сайта Майкрософт
- Установите exe-файл (читайте инструкции в zip-архиве)
скопируйте 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
примечание:указанное имя пользователя было без домена