Использование проверки подлинности NTLM для подключения к SQL Server
Драйвер 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 одновременное включение расширенной защиты и шифрования не поддерживается.