Как аутентифицировать сервер sql в качестве пользователя Windows из java-приложения? [Дубликат]

Ваш код разбит на две полностью отдельные части, серверную сторону и клиентскую сторону .

                    |
               ---------->
              HTTP request
                    |
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
                    |
  client side       |      server side
                    |
               <----------
          HTML, CSS, JavaScript
                    |

Обе стороны общаются через HTTP-запросы и ответы. PHP выполняется на сервере и выводит код HTML и, возможно, JavaScript, который отправляется как ответ клиенту, где интерпретируется HTML, и выполняется JavaScript. Когда PHP завершит вывод ответа, сценарий закончится, и на сервере ничего не произойдет, пока не появится новый HTTP-запрос.

Пример кода выполняется следующим образом:


Шаг 1, PHP выполняет весь код между тегами . В результате получилось следующее:


Вызов file_put_contents не привел ни к чему, он просто написал «+ foo +» в файл. Вызов привел к выводу «42», который теперь находится в том месте, где этот код использовался.

Этот итоговый код HTML / JavaScript теперь отправляется клиенту, где он получает оценку , Вызов alert работает, а переменная foo нигде не используется.

Весь PHP-код выполняется на сервере до того, как клиент даже начнет выполнение какого-либо JavaScript. В ответе JavaScript, с которым может взаимодействовать JavaScript, нет кода PHP.

Чтобы вызвать некоторый код PHP, клиент должен будет отправить новый HTTP-запрос на сервер. Это может произойти с использованием одного из трех возможных способов:

  1. Ссылка, которая заставляет браузер загружать новую страницу.
  2. Подача формы, которая передает данные на сервер и загружает новую страницу.
  3. Запрос AJAX , который является техникой Javascript, чтобы сделать обычный HTTP-запрос на сервер (например, 1. и 2. будет), но без оставляя текущую страницу.

Вот более подробный изложение этого метода

Вы также можете использовать JavaScript, чтобы браузер открыл новую страницу с помощью window.location или отправить форму, подражая возможностям 1 и 2.

52
задан karlgrz 3 October 2008 в 19:36
поделиться

4 ответа

Я не думаю, что можно вывести учетные данные пользователя из браузера в базу данных (и это имеет смысл? Я думаю, что нет)

Но если вы хотите использовать учетные данные пользователя, запускающего Tomcat для подключения к SQL Server, вы можете использовать драйвер JDBC от Microsoft. Просто создайте URL-адрес JDBC следующим образом:

jdbc:sqlserver://localhost;integratedSecurity=true;

И скопируйте соответствующую DLL в каталог bin Tomcat (sqljdbc_auth.dll с драйвером)

MSDN> Подключение к SQL Server с драйвером JDBC> Создание URL-адреса подключения

74
ответ дан Jerome Delattre 25 August 2018 в 12:08
поделиться
  • 1
    Почему не нужно вводить учетные данные пользователя из браузера в базу данных? Я думаю, что многодорожечная аутентификация ТОЧНО, что здесь ищет OP. Учитывая, что я на 3 года опоздал на этот ответ, но я хотел бы понять ваше обоснование. – KyleM 23 May 2011 в 16:35

У меня возникла проблема с подключением к MS SQL 2005 с использованием проверки подлинности Windows. Я смог решить проблему с помощью этого и других форумов. Вот что я сделал:

  1. Установить драйвер JTDS
  2. Не использовать свойство «domain =» в jdbc: jtds :: // [:] [/ ] [; = [; ...]] string
  3. Установите ntlmauth.dll в каталог c: \ windows \ system32 (регистрация DLL не требуется) на машине веб-сервера.
  4. Измените идентификатор входа для службы Apache Tomcat на домен пользователя с доступом к серверу базы данных SQL (пользователю не нужно было иметь доступ к dbo.master).

Мое окружение: клиентская станция Windows XP, на которой размещается Apache Tomcat 6 с бэкэндом MS SQL 2005 в Windows 2003

24
ответ дан Bill the Lizard 25 August 2018 в 12:08
поделиться
  • 1
    Очень полезная информация - особенно о домене! – StephMW 20 May 2011 в 13:59

Это действительно работает для меня:

В README.SSO, который поставляется с дистрибутивом jtdsd:

Для того, чтобы Single Sign On работал, 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
7
ответ дан Clijsters 25 August 2018 в 12:08
поделиться

Если у вас нет какой-то по-настоящему убедительной причины, я предлагаю отключить драйвер MS JDBC.

Вместо этого используйте драйвер jtds jdbc . Прочтите файл README.SSO в дистрибутиве jtds о том, как настроить для однократной регистрации (собственная проверка подлинности) и где разместить собственную DLL для обеспечения ее загрузки JVM.

5
ответ дан Kevin Day 25 August 2018 в 12:08
поделиться
  • 1
    Вопрос действительно ищет SSO (один знак включен). – jim 3 December 2008 в 13:19
  • 2
    @jim: если у вас есть аутентификация на основе Kerberos в Linux, вы можете иметь SSO, но из моего единственного способа использовать его для проверки подлинности MS SQL в Linux - это драйвер DataDirect. – Hubert Kario 14 December 2011 в 14:08
  • 3
    Почему драйвер JTDS предпочтительнее? Я понимаю, что это не поддерживает объединение пулов, что для меня важно. – megaflop 1 May 2012 в 17:05
  • 4
    Это больше, чем стоит, и имеет последствия для производительности. Во время замены jTDS драйвер Microsoft дал примерно 20% прироста производительности. В некоторых очень специфических обстоятельствах jTDS работает лучше, и мы используем его для них. Это не общее решение и вообще не стоит усилий. – Alain O'Dea 5 October 2012 в 23:33
  • 5
    Несколько лет назад Microsoft пренебрегала своим Java-драйвером, и jTDS восприняла утечку. В настоящее время Microsoft прилагает больше усилий к официальным драйверам Java. Я бы использовал их для текущих приложений. Я не думаю, что сейчас есть причина использовать jTDS, но я не использую их в течение длительного времени, поэтому у меня нет опыта работы. – Alejandro Dobniewski 14 December 2016 в 19:40
Другие вопросы по тегам:

Похожие вопросы: