Этот драйвер не настроен для встроенной проверки подлинности

Обновлено: 07.07.2024

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

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

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

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

Любые другие предложения?

ОТВЕТЫ

Ответ 1

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

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

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

EDIT. Я не могу быть на 100% уверен, что SFS использует 64-разрядную Java только потому, что в ней заканчиваются файлы C:\Program Files, а не C:\Program Files (x86).

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

Так как версия 1.5 SmartFoxServer поставляется со своим 32-разрядным Sun Java Runtime x86.

Один быстрый способ определить, какие версии Java, которые вы установили, - это посмотреть, существует ли одна или обе папки C:\Program Files\Java или C:\Program Files (x86)\Java . Конечно, если обе папки существуют, это не очень поможет вам.

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

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

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

Ответ 2

При использовании Windows Authentication Integrated Security

  • Загрузите sqljdbc_6.0.8112.100_enu.exe с сайта Microsoft
  • Установите exe (прочитайте инструкции в zip-пути)

скопируйте sqljdbc_4.0/enu/auth/x64/sqljdbc_auth.dll в

Java/jre7/bin и

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

мой стандартный отказ от ответственности: я не работал с Java около 10 лет, поэтому очень вероятно, что я делаю что-то элементарное неправильно здесь.

Я пишу "расширение на стороне сервера" для SmartFoxServer (SFS). В моем сценарии входа мне нужно установить соединение с 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 файлы в отличие от C:\Program файлы (x86).

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

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

один быстрый способ определить, какие версии Java вы установили, чтобы увидеть, является ли одна или обе папки C:\Program Files\Java или C:\Program Files (x86)\Java exist. Конечно, если обе папки существуют, это не очень поможет вам.

работает ли ваше приложение, если вы используете версию x86 sqljdbc_auth.dll вместо версии x64? Если это вдруг начинает работать с DLL x86, затем 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 С сайта Microsoft
  2. установите exe (прочитайте инструкции в пути zip)

копировать sqljdbc_4.0 / enu/auth/x64 / sqljdbc_auth.dll в

Java/jre7 / bin и

после этого вы сможете подключиться к Hibernate tools для потяните базу данных в Data Tools

Microsoft ODBC Driver for SQL Server в Linux и macOS поддерживает соединения, использующие встроенную проверку подлинности Kerberos. Он поддерживает центр распространения ключей (KDC) Kerberos MIT и работает с общим API служб безопасности (GSSAPI) и библиотеками Kerberos версии 5.

Начиная с версии 17.6, драйвер также поддерживает встроенную проверку подлинности с помощью Azure Active Directory с использованием федеративной учетной записи, независимо от ограничений системной библиотеки. Дополнительные сведения см. в статье Использование Azure Active Directory.

Использование встроенной проверки подлинности для подключения к SQL Server из приложения ODBC

Вы можете включить встроенную проверку подлинности Kerberos, указав Trusted_Connection=yes в строке подключения для SQLDriverConnect или SQLConnect. Пример:

При подключении с использованием имени DSN можно также добавить Trusted_Connection=yes в запись имени DSN в файле odbc.ini .

Задать встроенную проверку подлинности можно также с помощью параметра -E команды sqlcmd и параметра -T команды bcp . Дополнительные сведения см. в статьях Соединение с помощью sqlcmd и Соединение с помощью bcp.

Убедитесь в том, что субъект клиента, который будет соединяться с SQL Server, уже прошел проверку подлинности с помощью Kerberos KDC.

ServerSPN и FailoverPartnerSPN не поддерживаются.

Развертывание приложения драйвера ODBC для Linux или macOS, предназначенного для запуска в качестве службы

Системный администратор может развернуть приложение для запуска в качестве службы, которое использует проверку подлинности Kerberos для подключения к SQL Server.

Сначала необходимо настроить Kerberos в клиенте, а затем убедиться в том, что приложение может использовать учетные данные Kerberos субъекта по умолчанию.

Убедитесь в том, что вы используете kinit или PAM (подключаемый модуль проверки подлинности) для получения и кэширования TGT для субъекта, используемого соединением, одним из следующих способов:

Запустите kinit , передав имя и пароль субъекта.

Запустите kinit , передав имя субъекта и расположение файла keytab, который содержит ключ субъекта, созданный ktutil .

Убедитесь в том, что вход в систему был выполнен с помощью PAM Kerberos (подключаемый модуль проверки подлинности).

Когда приложение запускается в виде службы, обновляйте учетные данные Kerberos, чтобы обеспечить постоянную доступность службы, так как учетные данные намеренно имеют срок действия. Драйвер ODBC не обновляет учетные данные. Убедитесь в том, что имеется задание cron или скрипт, которые периодически выполняют обновление учетных данных до истечения срока их действия. Чтобы избежать запроса пароля для каждого обновления, можно использовать файл keytab.

СтатьяКонфигурация и использование Kerberos содержит сведения о способах применения Kerberos для служб в Linux.

Отслеживание доступа к базе данных

Администратор базы данных может создать журнал аудита доступа к базе данных при использовании системных учетных записей для доступа к SQL Server с помощью встроенной проверки подлинности.

Для входа в SQL Server используется системная учетная запись, а в Linux нет никаких функций для олицетворения контекста безопасности. Таким образом, для определения пользователя требуется нечто большее.

Для аудита действий в SQL Server от имени пользователей, отличных от системной учетной записи, приложение должно использовать EXECUTE AS Transact-SQL.

Для повышения производительности приложение может использовать организацию пулов соединений со встроенной проверкой подлинности и аудитом. Однако совмещение организации пулов соединений, встроенной проверки подлинности и аудита создает угрозу безопасности, так как диспетчер драйверов unixODBC позволяет различным пользователям повторно использовать подключения из пула. Дополнительные сведения см. в статье Организация пулов соединений ODBC.

Перед повторным использованием приложение должно сбросить соединения в пуле, выполнив sp_reset_connection .

Использование Active Directory для управления удостоверениями пользователей

Администратору системы приложений не требуется управлять отдельными наборами учетных данных входа для SQL Server. Можно настроить Active Directory в качестве центра распространения ключей (KDC) для встроенной проверки подлинности. Дополнительные сведения см. в статье Microsoft Kerberos.

Использование связанного сервера и распределенных запросов

Разработчики могут развернуть приложение, которое использует связанный сервер или распределенные запросы, без администратора базы данных, обслуживающего отдельные наборы учетных данных SQL. В этом случае разработчику необходимо настроить в приложении использование встроенной проверки подлинности:

Пользователь входит на клиентский компьютер и выполняет проверку подлинности для сервера приложений.

Сервер приложений осуществляет проверку подлинности в качестве другой базы данных и подключается к SQL Server.

SQL Server проходит проверку подлинности как пользователь базы данных в другой базе данных (SQL Server.

После настройки встроенной проверки подлинности учетные данные передаются связанному серверу.

Встроенная проверка подлинности и sqlcmd

Чтобы получить доступ к SQL Server с помощью встроенной проверки подлинности, используйте параметр -E программы sqlcmd . Убедитесь в том, что учетная запись, используемая для запуска sqlcmd , сопоставлена с субъектом клиента Kerberos по умолчанию.

Встроенная проверка подлинности и bcp

Чтобы получить доступ к SQL Server с помощью встроенной проверки подлинности, используйте параметр -T программы bcp . Убедитесь в том, что учетная запись, используемая для запуска bcp , сопоставлена с субъектом клиента Kerberos по умолчанию.

Использование параметра -T с параметром -U или -P является ошибкой.

В именах субъектов-служб в атрибутах или строке подключения применяется следующий синтаксис:

Синтаксис Описание
MSSQLSvc/fqdn:port Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол TCP. port — номер TCP-порта. fqdn — полное доменное имя.

Проверка подлинности компьютера Linux или macOS с помощью Active Directory

Чтобы настроить Kerberos, введите данные в файле krb5.conf . krb5.conf находится в папке /etc/ , но можно сослаться на другой файл, используя такой синтаксис: export KRB5_CONFIG=/home/dbapp/etc/krb5.conf . Ниже представлен пример файла krb5.conf .

Время на компьютере Linux или macOS и время в центре распространения ключей Kerberos (KDC) не должны слишком сильно различаться. Убедитесь в том, что системное время задано правильно, например с помощью протокола NTP.

При сбое проверки подлинности Kerberos драйвер ODBC в Linux или macOS не использует проверку подлинности NTLM.

Дополнительные сведения о проверке подлинности компьютера Linux или macOS с помощью Active Directory см. в статье Проверка подлинности клиентов Linux с помощью Active Directory. Дополнительные сведения о настройке Kerberos см. в документации MIT Kerberos.


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

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

Существуют разные версии 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).

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

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

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

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

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

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

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

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

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

  1. Загрузите sqljdbc_6.0.8112.100_enu.exe с сайта Microsoft
  2. Установите exe (прочтите инструкции в zip-пути)

скопируйте sqljdbc_4.0 / enu / auth / x64 / sqljdbc_auth.dll в

Java / jre7 / bin и чтобы

Java / jre7 / lib

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

  • 3 Достаточно копирования в каталог bin Java
  • Для меня было достаточно поместить в соответствующие jdk / bin и jre / bin.

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

В моем случае я сделал следующее, чтобы решить:

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

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

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

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

Читайте также: