Подключение к MS SQL Server из Intellij Idea + исправление ошибок 18456 и 233

Вчера весь день я провёл, пытаясь подключиться к локальной базе данных на MS SQL Server, но это опять больше напоминало какой-то квест (как во многих моментах в программировании): как только одна небольшая задачка оказывалась решена, впереди оказывалась ещё одна – не менее непонятная. В итоге я всё же справился и с сервером, и с кодом в Идее, поэтому решил законспектировать свои успехи.

Мне нужно было запустить у себя на компьютере приложение, которое уже неплохо работало на удалённом сервере. Для этого я был готов собрать проект из исходного кода, но для корректной работы необходимо было ещё и продублировать базу данных. Я поставил SQL Server, восстановил базу из дампа с рабочего сервера (правой кнопкой по Databases -> Restore Database -> в Device выбрать нужный файл с компьютера), но дальше всё не шло так уж гладко. Залогиниться из среды Intellij Idea не выходило, собранное приложение этого тоже не могло делать, поэтому просто крашилось при запуске. Тут я подумал, что наверно следовало бы настроить MS SQL Server – просто поставить его недостаточно.

Я статью начну с описания того, что следовало бы сделать изначально – как всё настроить, чтобы всё сразу работало, а потом уже перейду к ошибкам, которые я получал, потому что так не сделал.

Настройка SQL Server Configuration Manager

Такая проблема решается настройкой в Configuration Manager. Найти его можно по адресу C:\Windows\SysWOW64\SQLServerManager14.msc (мой менеджер для SQL Server 2017, для боле новой версии 2019 был бы SQLServerManager15, для старой – SQLServerManager11-13, но всё в той же папке).

Здесь нужно развернуть пункт меню SQL Server Network Configuration, выбрать нужную конфигурацию (у меня это SQLEXPRESS) и убедиться, что TCP/IP включён (Enabled) – исправить ситуацию можно правой кнопкой мыши – Enable.

Далее нужно просмотреть свойства (двойное нажатие мыши), убедиться, что на вкладке Prototocol -> Listen All – Yes, а на вкладке IP Adresses в самом низу в IPAll записан порт 1433.

Вообще порт можно выбрать и другой, но я в своей конфигурации остаюсь со стандартным вариантом.

Настройка в SQL Server Management Studio

Дла начала нужно создать юзера. Для этого я подключился к базе с проверкой подлинности Windows в навигаторе слева выбрал Security -> Logins -> щелчок правой кнопкой -> New Login.

В этом окне создаём логин с аутентификации SQL Server Authentication. Далее всё довольно просто: Login Name – имя пользователя, в password – его пароль. Снять галочку с Enforce password security policy и всё – готово.

Далее нужно отредактировать роли этого нового юзера (или уже существующего, если у вас уже есть логин и пароль, но с ними что-то идёт не так). Для этого в папке Logins выбираем эту новосозданную запись -> щелчок правой кнопкой -> Properties. На вкладке Server Roles отмечаем нужные роли. Я ткнул sysadmin, чтобы всё уж точно работало.

Ну и чтобы после всех этих настроек всё работало корректно, нужно перезапустить сервер. Я даже перезапустил службу SQL Server (SQLEXPRESS). Но вообще для остановки или запуска сервера можно и вбить в командной строке (конечно же от имени администратора):

net {stop|start} mssqlserver

Проверьте, работает ли новый логин, отключившись и подключившись заново уже с новым типом аутентификации.

Если вы всё ещё получаете ошибку Microsoft SQL Server Error: 18456, или то проверьте, включена ли вообще аутентификация по логину и паролю. Правой кнопкой по экземпляру SQL Server -> Properties -> Security -> выберите SQL Server and Windows Authentication Mode. Также это должно решить проблему 233:

A connection was successfully established with the server, but then an error occurred during the login process
Error Number: 233

Теперь всё должно работать и можно подключаться к базе с помощью логина и пароля. Ну и дальше можно уже организовать подключение из IDE.

Подключение из Intellij Idea с помощью Windows Credentials

Для начала я решил проверить соединение с базой из Intellij Idea. Чтобы его создать нужно перейти в панель Database (у меня она справа, но также выбрать её можно через меню View -> Tool Windows -> Database). Нажимаем на плюсик и создаём новый источник (Data Source), у меня это Microsoft SQL Server с какой-то непонятной иконкой.

Внутри заполняем все нужные данные.

Название хоста – в моём случае название моего компьютера,

в Instance – SQLEXPRESS (или может у вас MSSQLSERVER?)

Стандартный порт 1433.

В Authentication выбираем Windows Credentials – начинаем с простого.

Database весьма очевидное поле – имя базы данных.

Не забудьте переключить драйвер на Microsoft SQL Server (jTds) – обычный Microsoft почему-то у меня работает некорректно (и, судя по stackoverflow, не у меня одного).

Ошибки подключения из Intellij Idea

Вроде бы всё должно работать, но при моих попытках подключиться из Intellij Idea я получал следующее сообщение об ошибке:

[08S01] The TCP/IP connection to the host localhost, port 1433 has failed. Error: "Connection timed out: no further information.. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

Такая проблема решается настройкой в Configuration Manager (см выше — первый пункт).

Подчеркну, что я сначала создавал подключение, а лишь потом кинулся всё настраивать, поэтому я имел несчастье наблюдать эти ошибки. После настройки эта проблема разрешилась. Поэтому, если вы начали с настройки, то у вас этой проблемы быть и не должно.

Но далее у меня вылезла новая ошибка:

[08S01] The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". ClientConnectionId:9a5.......
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

С безопасностью я в принципе мало дружу, но гугл подказал, что всего лишь нужно в URL добавить пару новых параметров: encrypt=true и trustServerCertificate=true.

Тогда строка для подключения (URL) получилась такой:

jdbc:sqlserver://MYCOMPUTER\SQLEXPRESS:1433;database=db_example;encrypt=true;trustServerCertificate=true

И теперь в Intellij Idea я мог спокойно подключаться к базе с помощью Windows Credentials.

Подключение из Intellij Idea с помощью User & Password Authentication

Здесь настройка почти ничем не откличается. Только выбираем другой тип аутентификации и вводим логин и пароль, который недавно создавали (см. выше – Настройка в SQL Server Management Studio).

После этого можно жамкнуть Test Connection, чтобы убедиться, что всё работает.

Вот и всё! Всё должно работать. Теперь можно засунуть это подключение в Hibernate.

<hibernate-configuration>

<session-factory>

<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>

<property name="connection.url">jdbc:jtds:sqlserver://SALINGER:1433/db_example;instance=SQLEXPRESS;encrypt=true;trustServerCertificate=true</property>

<property name="connection.username">admin</property>

<property name="connection.password">{HIDDEN } </property>

<property name="connection.pool_size">100</property>

<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

<...>

</session-factory>

</hibernate-configuration>

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

1 Comment

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s