Подключение к 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, и он мог подключиться.