Популярная среди администраторов баз данных SQL Server Management Studio (SSMS) для подключения к серверам баз данных (по версию 18.12.1 включительно) использовала System.Data.Sqlclient (SDS). Новая версия SQL Server теперь поставляется с библиотеками Microsoft.Data.Sqlclient (MDS). Пакет Microsoft.Data.SqlClient теперь доступен на NuGet и становится основным способом доступа к данным для SQL Server. Этот пакет поддерживает как .NET Core, так и .NET Framework. Создание нового SqlClient в новом пространстве имен позволяет старому System.Data.SqlClient и новому Microsoft.Data.SqlClient жить бок о бок, хотя это и не происходит автоматически.
MDS меняет способ обработки подключений к SQL Server, что вы могли заметить, обновившись до SSMS 19, а затем подключившись к SQL Server 2022 или более ранним версиям. В частности, в MDS реализована проверка сертификатов, чего раньше не было в SDS. Давайте рассмотрим, как это настраивается и что вы можете увидеть в SSMS 19.x.
Конфигурация сервера
В Configuration Manager перейдите в раздел «SQL Server Network Configuration», затем «Protocols», затем щелкните правой кнопкой мыши и выберите «Properties». В открывшемся окне будет доступна опция принудительного шифрования, значение которой по умолчанию — No:
Этот параметр существовал и в более ранних версиях SQL Server, и, если указывалось принудительное шифрование, а проверяемый сертификат не был установлен, драйвер SDS в SSMS 18.x просто не проверял сертификат. Начиная с SSMS 19.x, которая использует драйвер MDS это поведение изменилось.
Окно подключения SSMS
В окне нового подключения к серверу SSMS 19.x после выбора кнопки «Options >>», для сервера с принудительным шифрованием необходимо выбрать опцию «Trust server certificate», которая, как и прежде находится на вкладке свойств подключения:
В SSMS 19, когда у сервера установлено принудительное шифрование, необходимо пометить чекбокс «Trust Server Certificate». Если этого не сделать, то вы можете столкнуться со следующей ошибкой:
Также, ошибки при подключении могут возникнуть, если ваш сертификат создан неправильно. Дополнительную информацию можно найти в разделе «Настройка ядра СУБД SQL Server для шифрования подключений». Вот рекомендация из этой области: при создании сертификата используйте параметр -DnsName, для которого нужно указать DNS-имя сервера. Это DNS-имя будет использоваться для проверки сертификата. Вам также может потребоваться добавить NETBIOS-имя сервера в список альтернативных имен субъектов. Примеры команд для создания само-подписного сертификата с дополнительными альтернативными именами субъектов можно найти в описании New-SelfSignedCertificate.