Вот моя ситуация. Есть три сервера:
У меня есть код C #, который подключается к Сервер-SQL который одинаков на обоих Сервер-1 и Сервер-2 с одинаковыми строками подключения.
Строка подключения выглядит примерно так:
Provider=MSOLEDBSQL;Server=Server-SQL;Database=database;Uid=user;Pwd=password;Encrypt=yes
Новый устаревший драйвер OLE DB 2018 установлен на обоих Сервер-1 и Сервер-2.
Ключи реестра, которые включают / отключают шифрование, настроены одинаково на обоих серверах. например
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
При запуске того же кода C # на Сервер-1 и Сервер-2, Сервер-1 подключается к базе данных без проблем, но Сервер-2 выдает следующее сообщение об ошибке:
Произошла ошибка, связанная с сетью или конкретным экземпляром, при установке соединения с SQL Server. Сервер не найден или недоступен. Проверьте правильность имени экземпляра и настройку SQL Server для удаленных подключений. Дополнительные сведения см. В электронной документации по SQL Server. Сетевые интерфейсы SQL Server: протоколы удаленного клиента не включены, и в строке подключения [xFFFFFFFF] не указан удаленный протокол.
Со следующей трассировкой стека:
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection wningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at Squealer.Squealer.TryToConnectToDatabase(DatabaseConnectionInfo connectionInfo)
at Squealer.Squealer.Run(String[] args)
Я не вижу никаких правил в брандмауэрах ни на Сервер-1 или Сервер-2 это предотвратит сетевой трафик Сервер-SQL.
WireShark захватывает трафик между Сервер-1 и Сервер-SQL как это:
WireShark вообще не захватывает трафик между Сервер-2 и Сервер-SQL при попытке установить соединение SQL.
Сетевое соединение между Сервер-2 и Сервер-SQL было установлено следующее:
SQL Server настроен на использование TLS 1.1 и TLS 1.2. Когда он настроен на соединение с TLS 1.1, соединение успешно.
Я скомпилировал код .net как с .net 4.6.2, так и с 4.7.0. На обоих серверах установлено до .net 4.7.0.
Тестирование файла UDL с Provider = MSOLEDBSQL.1 фактически подключается на обоих серверах.
Несмотря на обширный поиск в Google, я не нашел никаких следов этого конкретного сообщения об ошибке, поэтому мне больше нечего здесь делать ..
Я ищу ключ реестра, который кто-то исказил? У меня нет идей.
Любая помощь или пролить свет на эту ситуацию будет полностью-полностью получили.
Спасибо.