Ознаки
Розглянемо такий сценарій:
-
Функція SQL CLR використовується в SQL Server 2016 і 2017 роках.
-
Функція CLR викликає оператори Transact-SQL через виклики уособлення, наприклад за допомогою оператора EXECUTE AS.
У цьому випадку виконання не вдається, і з'являється таке повідомлення про помилку:
Msg 6522, рівень 16, стан 1, Procedure PrcedureName, рядок 0 [Batch Start Line LineNumber]
Сталася помилка .NET Framework під час виконання визначеної користувачем процедури або агрегату "ProcedureName":
System.Data.SqlClient.SqlException: принципал сервера "LoginName" не може отримати доступ до бази даних "DatabaseName" у поточному контексті безпеки.
Спосіб вирішення
Це виправлення входить до складу сукупного пакета оновлень 1 для SQL Server 2017.
Відомості про пакет оновлень для SQL Server 2016
Цю проблему вирішено в такому пакеті оновлень для SQL Server:
Про збірки SQL Server 2017
Кожна нова збірка для SQL Server 2017 містить усі виправлення та виправлення системи безпеки, які були в попередній збірці. Радимо інсталювати найновішу збірку для SQL Server 2017 р.
Пакети оновлень сукупні. Кожен новий пакет оновлень містить усі виправлення, що містяться в попередніх пакетах оновлень, а також усі нові виправлення. Ми рекомендуємо застосувати останній пакет оновлень і останній сукупний пакет оновлень для цього пакета оновлень. Не потрібно інсталювати попередній пакет оновлень, перш ніж інсталювати останній пакет оновлень. Скористайтеся таблицею 1 у наведеній нижче статті, щоб знайти додаткові відомості про останній пакет оновлень і останній сукупний пакет оновлень.
Визначення рівня версії, випуску та оновлення SQL Server та її компонентів
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "Стосується".
Посилання
Дізнайтеся про термінологію , яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.