Подключение к SQL Server с помощью NodeJS

Я исследую стек для нового приложения, над которым нам нужно работать. Одной из его функций является возможность подключения к базе данных SQL Server (на данный момент 2012 года и новее).

У меня есть Java MVP, который очень хорошо работает почти со всем, что нам нужно: он использует драйвер JTDS для подключения к SQL Server, я думаю, с использованием аутентификации NTLM. Поскольку наш веб-стек находится в NodeJS, я также пытался сделать то же самое в Node+Electron, столкнулся с проблемами и понял, что не понимаю, как части механизма аутентификации сочетаются друг с другом.

Я хотел бы обобщить здесь некоторые выводы в надежде помочь другим и получить некоторую помощь самому.

Я начал с tedious, так как это рекомендуется в В документах MSDN не удалось подключить приложение из-за проблем со входом: Ошибка входа с ошибкой ELOGIN без дополнительной информации об ошибке. Именно тогда я прочитал, что tedious не полностью обрабатывает аутентификацию Windows: нужно указать имя пользователя и пароль, над которым в настоящее время ведется работа. При условии, что это по-прежнему вызывает ту же ошибку. Затем я нашел tedious-ntlm, который обрабатывает NTLM-аутентификацию, которая у меня тоже не сработала:

Ошибка ненадежного домена

Поскольку механизм аутентификации Java JTDS NTLM работает хорошо, я полагаю, что он tedious-ntlm делает что-то другое. Также tedious-ntlm заставил node 6 and 7 жаловаться на устаревшую функцию crypto, которую было легко исправить, но она по-прежнему говорит мне, что модуль плохо поддерживается.

Я также пробовал другие драйверы и ORM: mssql, edge, sequelize, seriate, node-sqlserver, node-sqlserver-unofficial безуспешно для подключения к базе данных. Такие ORM, как sequelize и seriate, используют tedious для драйвера. Mssql также использует tedious - он устанавливает tedious в lib/, а ошибки исходят от tedious.

Наконец, последнее замешательство пришло из чтения о том, что такое SSPI, проверка подлинности Windows и NTLM и когда они используются. Полезно прочитать об этом здесь, но вкратце: SSPI — это интерфейс, который операционные системы Windows используют, чтобы разрешить приложениям/пользователям аутентифицировать себя с помощью Kerberos, NTLM или других протоколов. Похоже, что NTLM используется для локальных подключений, тогда как Kerberos будет использоваться для удаленных подключений, но это может быть чрезмерным упрощением. Этот пост также подробно описывает SSPI.

Теперь вот вопросы:

  1. Когда я хочу подключиться к SQL Server со следующими условиями:

    • from localhost to localhost (desktop application)
    • без указания имени пользователя/пароля, с использованием текущего пользователя
    • с использованием проверки подлинности Windows, доверенное соединение
    • не разрешено создавать нового пользователя на SQL Server для использования аутентификации SQL Server

    ...буду ли я использовать протокол NTLM или Kerberos?

  2. Может ли tedious или любые другие драйверы для Node JS сделать это?

  3. Что из того, что я сказал выше, неверно, что сбивает меня с толку?

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


person Serge Poele    schedule 06.12.2016    source источник