Могу ли я подключиться к SQL Server с помощью аутентификации Windows из веб-приложения Java EE?
В настоящее время я изучаю, как установить соединение с базой данных SQL Server из моего веб-приложения Java EE, используя аутентификацию Windows вместо аутентификации SQL Server. Я запускаю это приложение с Tomcat 6.0 и использую драйвер Microsoft JDBC. Мой файл свойств подключения выглядит следующим образом:
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 для доступа к базе данных.
5 ответов
Я не думаю, что можно передавать учетные данные пользователя из браузера в базу данных (и имеет ли это смысл? Думаю, что нет)
Но если вы хотите использовать учетные данные пользователя, запустившего Tomcat, для подключения к SQL Server, вы можете использовать драйвер JDBC от Microsoft. Просто создайте свой URL JDBC следующим образом:
jdbc:sqlserver://localhost;integratedSecurity=true;
И скопируйте соответствующую DLL в каталог bin Tomcat (sqljdbc_auth.dll, поставляемый с драйвером)
MSDN> Подключение к SQL Server с помощью драйвера JDBC> Создание URL-адреса подключения
Посмотри на
http://jtds.sourceforge.net/faq.html
Какой формат URL используется jTDS?
Формат URL для jTDS:
jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
... domain Указывает домен Windows, в котором выполняется аутентификация. Если присутствует и указаны имя пользователя и пароль, jTDS использует аутентификацию Windows (NTLM) вместо обычной аутентификации SQL Server (т. е. предоставленные имя пользователя и пароль - это имя пользователя и пароль домена).). Это позволяет клиентам, отличным от Windows, войти в систему на серверах, которые настроены только на проверку подлинности Windows.
Если параметр домена присутствует, но имя пользователя и пароль не предоставлены, jTDS использует собственную библиотеку единого входа и входит в систему с учетными данными зарегистрированного пользователя Windows (для этого, очевидно, необходимо войти в Windows, войти в систему). домен, а также с установленной библиотекой SSO - обратитесь к README.SSO в дистрибутиве, чтобы узнать, как это сделать).
Это на самом деле работает для меня:
Согласно README.SSO, который поставляется с дистрибутивом jtdsd:
Чтобы единый вход работал, jTDS должен иметь возможность загружать собственную библиотеку SPPI. ntlmauth.dll
, Поместите эту DLL в любом месте системного пути (определяется PATH
системная переменная) и все готово.
Я поместил его в папку JRE / BIN
Я настроил порт, выделенный для экземпляра сервера sql (2302), чтобы облегчить необходимость в имени экземпляра - просто то, что я делаю. lportal - это имя моей базы данных.
jdbc.default.url=jdbc:jtds:sqlserver://192.168.0.147:2302/lportal;useNTLMv2=true;domain=mydomain.local
Если у вас нет веских причин не делать этого, я предлагаю отказаться от драйвера MS JDBC.
Вместо этого используйте драйвер jtds jdbc. Прочтите файл README.SSO в дистрибутиве jtds, чтобы узнать, как настроить единый вход (собственная аутентификация) и куда поместить собственную DLL, чтобы она могла быть загружена JVM.
У меня была проблема с подключением к MS SQL 2005 с использованием проверки подлинности Windows. Я смог решить проблему с помощью этого и других форумов. Вот что я сделал:
- Установите драйвер JTDS
- Не используйте свойство domain= в строке jdbc:jtds:://[:][/][;=[;...]]
- Установите ntlmauth.dll в каталоге c:\windows\system32 (регистрация dll не требовалась) на компьютере веб-сервера.
- Измените идентификатор входа для службы Apache Tomcat на пользователя домена с доступом к серверу базы данных SQL (пользователю не нужно было иметь доступ к dbo.master).
Моя среда: Windows XP Clinet, на которой размещается Apache Tomcat 6 с бэкэндом MS SQL 2005 на Windows 2003