SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP Провайдер: Код ошибки 0x2746

Вопрос или проблема

Я использую PHP Laravel 7.4 на Ubuntu 20.04 и пытаюсь получить данные из SQL Server, расположенного на сервере Windows в другом облаке.

Этот метод был протестирован на моем ПК (Windows), и он успешно извлек данные с сервера Windows. Однако на моем сервере Ubuntu я следую документации от Microsoft и получаю эту ошибку:

SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]
Поставщик TCP: Код ошибки 0x2746 (SQL: myquery) 
{"userId":94,"exception":"[объект] 
(Illuminate\Database\QueryException(code: 08001): SQLSTATE[08001]: 
[Microsoft][ODBC Driver 17 for SQL Server]Поставщик TCP: Код ошибки 
0x2746 (SQL: myquery) на /var/www/web-api/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669)

Я проверил логи в Microsoft SQL Server Management Studio и заметил, что это сообщение появляется каждый раз, когда я делаю запрос с Ubuntu

“Запрос на соединение TLS 1.2 был получен от удаленного клиентского
приложения, но ни один из наборов шифров, поддерживаемых клиентским
приложением, не поддерживается сервером. Запрос на SSL-соединение
не удался.”

Как я могу это исправить?

Ошибка 08001 возникает, когда ODBC соединение с базой данных SQL Server не удается. Вы упомянули две вещи, которые выделяются:

  1. это работает на вашем локальном компьютере для разработки
  2. экземпляр SQL Server (возможно) работает на другом облачном провайдере

Поскольку соединение работает с вашего локального компьютера, имя пользователя/пароль, скорее всего, правильные, но вам стоит это проверить. Однако наиболее вероятной причиной будет брандмауэр. Подтвердите, что IP-адрес сервера Ubuntu разрешен через брандмауэр для сервера Windows, на котором работает SQL Server.

Следующие порты должны быть доступны:

TCP: 1433, 4022, 135, 1434
UDP: 1434

Ответ или решение

Ошибка SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746, с которой вы столкнулись при попытке подключения к SQL Server с вашего сервера на Ubuntu, может быть вызвана несколькими факторами. Рассмотрим их подробнее.

1. Анализ проблемы

Ваше сообщение об ошибке указывает на проблемы с установлением TLS-соединения. В частности, в журнале SQL Server Management Studio указано, что запрос на соединение TLS 1.2 был получен от клиента, но ни один из поддерживаемых сервером наборов шифров не совпадает с наборами шифров клиента. Это часто происходит, когда клиентское (в вашем случае, сервер на Ubuntu) программное обеспечение использует наборы шифров, которые не поддерживаются сервером.

2. Основные причины и пути решения

2.1 Поддержка TLS 1.2

Первое, что стоит проверить — правильно ли настроена поддержка TLS 1.2 на вашем сервере Ubuntu. Убедитесь, что последние обновления для OpenSSL и других связанных библиотек установлены, так как более ранние версии могут не поддерживать нужные криптографические протоколы.

Для проверки версии OpenSSL выполните команду:

openssl version

Если версия ниже 1.0.1, рекомендуется обновить OpenSSL до более новой версии.

2.2 Настройка шифровых наборов

На стороне сервера Windows убедитесь, что конфигурация шифровых наборов соответствует той, которая используется на клиенте. Если у вас есть доступ к настройкам сервера SQL, вы можете использовать инструменты, такие как gpedit.msc или реестр Windows, чтобы установить поддержку нужных шифров. Тем не менее, будьте осторожны и убедитесь, что понижение уровня безопасности не происходит.

2.3 Проверка брандмауэра

Очередной аспект, который необходимо рассмотреть, — настройки брандмауэра. Убедитесь, что IP-адрес вашего сервера Ubuntu разрешен для доступа к SQL Server, а также открыты необходимые порты:

  • TCP: 1433, 4022, 135, 1434
  • UDP: 1434

2.4 Оконечные параметры подключения

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

DB_CONNECTION=sqlsrv
DB_HOST=your_sql_server_ip
DB_PORT=1433
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

3. Проверка подключения

После выполнения вышеуказанных действий, протестируйте соединение с вашей базой данных с помощью командной строки. Используйте sqlcmd или любое другое SQL-клиентское приложение, чтобы убедиться, что проблема не на стороне вашего Laravel-приложения.

4. Заключение

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

Следуя вышеописанным шагам, вы должны устранить ошибку SQLSTATE[08001] и успешно подключиться к вашему SQL Server с сервера на Ubuntu.

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

Капча загружается...