Подключение к SQL Server с проверкой подлинности Windows с Linux-машины через JDBC

Я хочу иметь возможность подключиться к SQL Server с помощью проверки подлинности jdbc и windows. Я видел несколько ответов в Интернете, говоря, что я должен добавить следующее свойство в строку подключения:

integratedSecurity=true;

А также добавьте

sqljdbc_auth.dll

К пути java.

Но это, насколько я понимаю, применяется только тогда, когда я подключаюсь к Windows-машине. Когда я пробую это на машине Linux, я получаю:

java.sql.SQLException: This driver is not configured for integrated authentication

Мой вопрос: как мне это сделать с Linux-машины.

Спасибо

Ответы

Ответ 1

Ну, в конце концов я отвечу на свой вопрос: Это невозможно использовать проверку подлинности Windows с помощью Linux-машины с помощью драйвера JDBC Microsoft. Это можно использовать с помощью jTDS JDBC-драйвера, используя следующую строку подключения:

jdbc:jtds:sqlserver://host:port;databaseName=dbname;domain=domainName;useNTLMv2=true;

Спасибо всем за комментарии.

Ответ 2

TL; DR

Невозможно использовать встроенную проверку подлинности Windows для соединений JDBC с MSSQL из JVM, работающей в Linux.


В этой статье MSDN объясняются методы аутентификации с JDBC в Linux, возможные ошибки и доступные опции:

https://blogs.msdn.microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication/

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

  • NativeAuthentication (по умолчанию) - используется sqljdbc_auth.dll и относится к платформе Windows. Это был единственный вариант до драйвера JDBC 4.0.

  • JavaKerberos - использует API-интерфейсы Java для вызова kerberos и не зависит от платформы Windows. Это зависит от Java и не привязано к базовой операционной системе, поэтому его можно использовать как на платформах Windows, так и на Linux.

...

В следующем документе рассказывается, как использовать Kerberos с драйвером JDBC, и рассматриваются все, что необходимо для правильной работы JavaKerberos.

Использование встроенной аутентификации Kerberos для подключения к SQL Server http://msdn.microsoft.com/en-us/library/gg558122%28v=sql.110%29.aspx

Ответ 3

Я знаю, что это старая тема, но в случае, если Google отправляет людей сюда:

Существует два основных драйвера JDBC для SQL Server. Один из Microsoft, а другой из jTDS. Удивительно, но jTDS может подключаться с помощью аутентификации Windows (NTLM) с других платформ, включая Linux, как описано здесь: http://jtds.sourceforge.net/faq.html#windowsAuth. Конечно, он также может использовать аутентифицированные в SQL логины. Имена входа с проверкой подлинности в SQL не сложнее использовать в любой операционной системе, чем в любой другой, поэтому не забывайте о них.

Версия, предоставленная Microsoft, является той, из которой @mjn предоставил цитату из документации. Он может подключиться, используя проверку подлинности Windows, указав integratedSecurity=true, authenticationScheme=javaKerberos и authentication=NotSpecified.

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

Ответ 4

Для тех, кто использует DBeaver, способ подключения к базе данных SQL Server:

Для того, чтобы подключиться к SQL Server из Linux Debian с помощью DBeaver

1.- Выберите драйвер SQL Server jTDS

enter image description here

2.- Введите информацию о соединении

enter image description here

3.- Перейдите на вкладку Свойства драйвера и добавьте домен, пользователя, пароль

enter image description here

enter image description here

Просто в качестве заметки, в каком-то посте я обнаружил, что им нужно изменить свойство USENTLMV2 на TRUE, но у меня это сработало, либо установив USERTLNMV2 в true или false.

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

Ошибка входа. Логин входит в ненадежный домен и не может использоваться с аутентификацией Windows.

enter image description here

Эта ошибка возникла из-за истечения срока действия моего пользователя. Я попытался с другим пользователем AD, и он мог подключиться.