Проблема
Рассмотрим следующий сценарий.
- У вас есть функция SQL CLR в SQL Server 2016 и 2017.
- Функция CLR вызывает операторы Transact-SQL с помощью вызовов олицетворения, например путем вызова оператора EXECUTE AS.
В этом случае происходит сбой выполнения, и появляется следующее сообщение об ошибке:
Примечание
- MSG 6522, уровень 16, состояние 1, Procedure PrcedureName, строка 0 [ Номер строки начала пакета]
- Произошла ошибка платформы .NET Framework во время выполнения пользовательской процедуры или агрегата "ProcedureName":
- System.Data.SqlClient.SqlException: субъект сервера "LoginName" не может получить доступ к базе данных "DatabaseName" в текущем контексте безопасности.
Решение
Это исправление включено в накопительный пакет обновления 1 для SQL Server 2017.
Сведения о пакете обновления для SQL Server 2016
Эта проблема устранена в следующем пакете обновления для SQL Server:
Пакет обновления 2 для SQL Server 2016
Сведения о сборках SQL Server 2017
Каждая новая сборка SQL Server 2017 содержит все исправления и исправления безопасности, которые были в предыдущей сборке. Рекомендуется установить последнюю сборку SQL Server 2017.
Сведения о пакетах обновления для SQL Server
Пакеты обновления суммируются. Каждый новый пакет обновления содержит все исправления, которые были в предыдущих пакетах обновления, а также все новые исправления. Мы рекомендуем применять последний пакет обновления и последний накопительный пакет обновления для этого пакета обновления. Перед установкой последнего пакета обновления устанавливать предыдущий пакет обновления не требуется. Дополнительные сведения о последнем пакете обновления и последнем накопительном пакете обновления см. в таблице 1 в следующей статье.
Определение версии, выпуска и уровня обновления SQL Server и его компонентов
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Ссылки
Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.