Подключение Node.js к SQL Server с использованием имени экземпляра, порта и домена

Я создаю приложение Node.js, которое пытается подключиться к очень конкретной конфигурации SQL Server: оно работает как экземпляр с настраиваемым портом, и пользователям необходимо входить в систему через Active Directory, следовательно, подключение должно выполняться с использованием домена

Я использую пакет mssql с утомительным API, и это моя конфигурация:

connectionOptions = {
    server: 'USRCMX01\\INSTANCE1',
    port: 1367,
    domain: 'stagingsv',
    user: 'x.myuser.01',
    password: 'myuserpassword',
    options: {
        instanceName: 'INSTANCE1',
        trustServerCertificate: true,
        enableArithAbort: true
    }
};

Однако при использовании этой конфигурации я получаю сообщение об ошибке тайм-аута от SQL Server. После запуска службы браузера SQL Server и открытия порта 1434 с моего сервера экземпляра SQL Server я попытался еще раз, но мне повезло.

Строка подключения, которую я использовал раньше из студии управления SQL Server, выглядит так:

Driver={SQL Server Native Client 11.0};Server={USRCMX01\\INSTANCE1,1367};Uid={stagingsv\\x.myuser.01};Pwd={myuserpassword};Trusted_Connection={true};

.. И работает без нареканий

Есть ли способ подключиться к экземпляру SQL Server, используя имя экземпляра, домен и порт одновременно из Node.js?


person Sergio Palmeiras    schedule 27.01.2021    source источник
comment
Попробуйте удалить \\INSTANCE1 из имени сервера. Также используйте либо port, либо instanceName, но не оба   -  person Charlieface    schedule 28.01.2021
comment
Когда вы используете имя экземпляра, клиент должен запросить службу браузера SQL на udp/1434, чтобы преобразовать имя экземпляра в номер порта tcp. Если вы уже знаете порт, просто используйте имя сервера, порт в строке подключения.   -  person AlwaysLearning    schedule 28.01.2021


Ответы (1)


Аутентификация Windows для SQL не использует пароли. Он использует учетные данные существующего вошедшего в систему пользователя.

Таким образом, ваша строка подключения SSMS фактически игнорирует имя пользователя и пароль, и вам не следует их передавать. Чтобы получить тот же эффект с Tedious, он выглядит из документов так, как вам нужно. устанавливать:

 authentication.type = 'ntlm'

Но если нет, то попробуйте и другие варианты оттуда.

Принцип работы Windows Auth заключается в том, что он передает билет Kerberos (для пользователей AD) или хэш NTLM (для пользователей без AD), которые пользователь уже получил при входе в систему. строка подключения


Предупреждение: если вы используете Azure AD, а не локально, то это работает по-другому. Вы можете использовать пароль или билет Kerberos.

person Charlieface    schedule 27.01.2021
comment
Спасибо за ваше понимание. Я не использую Azure AD, в моем случае мы используем локальную AD. Тем не менее, нормально ли, что я вижу ошибку тайм-аута, а не ошибку аутентификации? - person Sergio Palmeiras; 28.01.2021