Использование проверки подлинности NTLM для подключения к SQL Server

Скачать драйвер JDBC

Драйвер Microsoft JDBC для SQL Server позволяет приложению использовать свойство подключения authenticationScheme , указывающее, что он хочет подключиться к базе данных с помощью проверки подлинности NTLM версии 2.

Для проверки подлинности NTLM также используются следующие свойства:

  • domain = domainName (необязательно).
  • user = userName.
  • пароль = password
  • integratedSecurity = true.

Все свойства, кроме domain, являются обязательными. Драйвер выдаст ошибку, если они отсутствуют, когда используется свойство authenticationScheme NTLM.

Дополнительные сведения о настройке свойств подключения см. здесь. Дополнительные сведения о протоколе проверки подлинности Microsoft NTLM см. здесь.

Замечания

Сведения о параметрах SQL Server, которые управляют поведением проверки подлинности NTLM, см. в разделе "Безопасность сети: уровень проверки подлинности LAN Manager".

Ведение журналов

Для поддержки аутентификации NTLM добавлено новое средство ведения журнала — com.microsoft.sqlserver.jdbc.internals.NTLMAuthentication. Дополнительные сведения см. в статье Трассировка операций драйвера.

DataSource

При использовании источника данных для создания подключений свойства NTLM можно задать программно. Можно использовать setAuthenticationScheme, setDomain и (необязательно) setServerSpn.

SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("<server>");
ds.setPortNumber(1433); // change if necessary
ds.setIntegratedSecurity(true);
ds.setAuthenticationScheme("NTLM");
ds.setDomain("<domainName>");
ds.setUser("<userName>");
ds.setPassword("<password>");
ds.setDatabaseName("<database>");
ds.setServerSpn("<serverSpn");

try (Connection c = ds.getConnection(); Statement s = c.createStatement();
        ResultSet rs = s.executeQuery("select auth_scheme from sys.dm_exec_connections where session_id=@@spid")) {
    while (rs.next()) {
        System.out.println("Authentication Scheme: " + rs.getString(1));
    }
}

Имена субъектов-служб

Имя участника-службы (service primary name, SPN) — это имя, по которому клиент единственным образом распознает экземпляр службы.

Вы можете самостоятельно указать имя субъекта-службы с помощью свойства подключения serverSpn или разрешить драйверу создать его (вариант по умолчанию). Это свойство имеет вид MSSQLSvc/fqdn:port@REALM, где fqdn — это полное доменное имя, port — номер порта, а REALM — область SQL Server в верхнем регистре. Область этого свойства является необязательной, так как область по умолчанию совпадает с областью сервера.

Например, имя субъекта-службы может выглядеть следующим образом: "MSSQLSvc/some-server.zzz.corp.contoso.com:1433"

Дополнительные сведения об именах субъектов-служб (SPN) см. в разделах:

Примечание.

Атрибут соединения serverSpn поддерживается только драйвером Microsoft JDBC Driver версии 4.2 или более поздней.

До версии драйвера JDBC 6.2 между областями необходимо явно задать параметр serverSpn. Начиная с версии 6.2, драйвер по умолчанию сможет создать параметр serverSpn, хотя он также может использовать параметр serverSpn явно.

Угрозы безопасности

Протокол NTLM — это устаревший протокол проверки подлинности с различными уязвимостями, который представляет угрозу безопасности. Он основан на слабой криптографической схеме и подвержен атакам. Протокол NTLM был изменен на Kerberos — более безопасное и рекомендуемое решение. Проверку подлинности NTLM следует использовать только в безопасной доверенной среде или в случае, если Kerberos не может использоваться.

Драйвер Microsoft JDBC для SQL Server поддерживает только NTLM версии 2, что имеет некоторые улучшения безопасности по сравнению с исходным протоколом версии 1. Также рекомендуется включить расширенную защиту или использовать шифрование TLS для повышения безопасности.

Дополнительные сведения о включении расширенной защиты см. в следующих статьях:

Дополнительные сведения о подключении с шифрованием см. здесь:

Примечание.

Для выпуска 7.4 одновременное включение расширенной защиты и шифрования не поддерживается.

См. также

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