mssql-jdbc всегда выдает недопустимую схему аутентификации NTLM

#java #sql-server #jdbc #ntlm

#java #sql-сервер #jdbc #ntlm

Вопрос:

 new SQLServerDriver();
String connectionUrl = "jdbc:sqlserver://<server>;integratedSecurity=true;authenticationScheme=NTLM;domain=<MYDOMAIN>;user=<user>;password=<password>;";
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement()) {
    String SQL = "select auth_scheme from sys.dm_exec_connections where session_id=@@spid";
    ResultSet rs = stmt.executeQuery(SQL);
    while (rs.next()) {
        System.out.println(rs.getString(1));
    }
}
 

Вот моя версия ОС и Java:

ОС: Windows 10
openjdk версии «1.8.0_242»
Среда выполнения OpenJDK (сборка 1.8.0_242-b08)
64-разрядная серверная виртуальная машина OpenJDK (сборка 25.242-b08, смешанный режим)

Не имеет значения, является ли строка ‘NTLM’ или ‘ntlm’ и т.д. Это сообщение:

Схема аутентификации «» недействительна

Здесь он определенно терпит неудачу https://github.com/microsoft/mssql-jdbc/blob/dev/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDriver.java#L245

Комментарии:

1. Извините, единственный способ, который я нашел для воспроизведения вашей ошибки, — добавить ;authenticationScheme="" в конец строки подключения. Однако я отмечаю, что сообщение об ошибке в заголовке вашего вопроса отличается от сообщения об ошибке в теле вашего вопроса, и я могу воспроизвести эту ошибку, если я включу пробелы нулевой ширины в Юникоде ( u200b ) в текст NTLM . Возможно ли, что это ваша проблема?

Ответ №1:

Я столкнулся с той же проблемой. Проблема устраняется с помощью последней версии драйвера jdbc mssql-jdbc-9.2.0.jre8.jar . Кроме того, убедитесь, что у вас есть dll-файл mssql-jdbc_auth-9.2.0.x64.dll , помещенный в lib path.