Можно ли подключиться к SQL Server с использованием Windows Authentication из веб-приложения Java EE?
Я в настоящее время изучаю, как установить соединение с базой данных SQL Server из моего веб-приложения на Java EE, используя аутентификацию Windows вместо аутентификации SQL Server. Я запускаю это приложение на Tomcat 6.0 и использую драйвер JDBC от Microsoft. Мой файл с параметрами подключения выглядит следующим образом:
dbDriver = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbUser = user
dbPass = password
dbServer = localhost:1433;databaseName=testDb
dbUrl = jdbc:sqlserver://localhost:1433
У меня нет никаких проблем с подключением к базе данных SQL Server таким образом, когда используется аутентификация SQL Server.
Есть ли способ получить учетные данные Windows-аутентификации пользователя и использовать эту аутентификацию для доступа к SQL Server?
ОБНОВЛЕНИЕ: Я знаю, что в ASP.NET есть способ настроить Windows-аутентификацию для доступа к веб-приложению, что именно меня интересует, но я хочу передать этот токен в SQL Server для доступа к базе данных.
3 ответ(ов)
Формат URL, используемый jTDS, имеет следующий вид:
jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
Параметр domain
Параметр domain
указывает на домен Windows, в котором необходимо пройти аутентификацию. Если этот параметр указан и введены имя пользователя и пароль, jTDS использует аутентификацию Windows (NTLM) вместо обычной аутентификации SQL Server, что означает, что указанные имя пользователя и пароль являются учетными данными доменного пользователя. Это позволяет клиентам, работающим не на Windows, входить на серверы, которые настроены для принятия только Windows-аутентификации.
Если параметр domain
указан, но имя пользователя и пароль не предоставлены, jTDS использует свою собственную библиотеку Single Sign-On и выполняет вход с учетными данными вошедшего в систему пользователя Windows. Для корректной работы данной функции необходимо находиться на Windows, быть вошедшим в домен и также установить библиотеку SSO — более подробную информацию можно найти в файле README.SSO в дистрибутиве.
Это действительно сработало для меня:
Согласно README.SSO, который идет в комплекте с дистрибутивом jtds:
Для того чтобы функция единого входа (Single Sign On) работала, jTDS должен иметь возможность загрузить родную библиотеку SPPI ntlmauth.dll
. Поместите этот DLL-файл в любое место, указанное в системном пути (определяемом переменной окружения PATH
), и всё будет готово.
Я поместил его в папку jre/bin.
Я настроил порт, выделенный для экземпляра SQL Server (2302), чтобы избежать необходимости указывать имя экземпляра — это просто мой подход. Имя моей базы данных — lportal.
jdbc.default.url=jdbc:jtds:sqlserver://192.168.0.147:2302/lportal;useNTLMv2=true;domain=mydomain.local
Я столкнулся с проблемой подключения к MS SQL 2005 с использованием Windows Authentication. Я смог решить эту проблему с помощью информации из этого и других форумов. Вот что я сделал:
- Установил драйвер JTDS.
- Не использовал свойство "domain=" в строке подключения jdbc:jtds://[:][/][;=[;...]].
- Установил файл ntlmauth.dll в директорию c:\windows\system32 (регистрация dll не требовалась) на машине с веб-сервером.
- Изменил учетную запись, под которой работает служба Apache Tomcat, на доменного пользователя с доступом к серверу базы данных SQL (не обязательно, чтобы у пользователя был доступ к dbo.master).
Моя среда: Клиент Windows XP, на котором работает Apache Tomcat 6 с бэкендом MS SQL 2005 на Windows 2003.
В чем разница между JPA и Hibernate? [закрыт]
Как распределяются потоки для обработки запросов Servlet?
Как заставить браузер скачать файл?
ResultSet: Извлечение значений столбцов по индексу или по метке?
Java Веб-Сервис: Основная аутентификация клиента