Ошибка запуска SCCM PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами научились намеренно запрещать скачивание и установку обновлений Windows, делали это исходя из-за возможных последствий со стороны Microsoft, хотя это конечно не правильно со стороны безопасности. В сегодняшней статье я хочу с вами поделиться опытом устранения проблем при запуске SCCM, после переноса SQL базы в период обслуживания, ошибка звучит вот так PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE, которая заполняла все логи. Давайте разбираться в чем было дело.
Описание ошибки PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE
Появилась задача перенести базы данных SCCM с одного диска на другой, крутятся они на MS SQL 2016, сам инстанс должен был остаться тот же, дело тривиальное. Перед работой с БД, я погасил виртуальную машину с SCCM. База успешно была перенесена, я сразу запустил виртуальную машину и естественно полез проверять работу System Center Configuration Manager.
Для этого я попытался запустить консоль Configuration Manager, но долго шло соединение с сайтом и в итоге появилась ошибка.
Консоли Configuration Manager не удалось подключиться к базе данных сайта Configuration Manager. Проверьте следующее:
• наличие сетевого подключения этого компьютера к компьютеру поставщика SMS;
• наличие для учетной записи пользователя разрешения на удаленную активацию на сервере сайта Configuration Manager и на компьютере поставщика SMS;
• поддерживает ли сервер сайта версию консоли Configuration Manager;
• назначена ли вам хотя бы одна роль безопасности администрирования на основе ролей;
• наличие следующих разрешений WMI для пространств имен Root\SMS и Root\SMS\site_<site code>: "Выполнение методов", "Запись поставщика", "Включение учетной записи" и "Включение удаленного доступа".
Явно было понятно, что System Center Configuration Manager не работает и есть проблемы с подключением к БД.
Устранение ошибки PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE
Первое, что вы всегда должны делать, это смотреть логи со стороны SCCM и так же со стороны SQL Server. Для просмотра журналов событий System Center Configuration Manager используется утилита CMtrace. Напоминаю, что на сервере вы можете обнаружить файлы журналов событий по пути:
Журналы просто были забиты ошибками соединения.
System.IO.FileLoadException: Could not load file or assembly 'cryptoutility, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
System.IO.FileLoadException:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
Со стороны SQL Server так же были ошибки:
Как выяснилось у SCCM не хватало прав, была включена CLR, поэтому для нее установлено разрешение external_access или unsafe из базы данных. Для нужной БД выполните:
USE [DatabaseName]
GO
EXEC sp_changedbowner 'sa'
ALTER DATABASE [DatabaseName] SET TRUSTWORTHY ON;
После этих манипуляций все отлично заработало.
Что такое свойство базы данных TRUSTWORTHY
Свойство TRUSTWORTHY используется для указания того, доверяет ли экземпляр SQL Server базе данных и ее содержимому. По умолчанию это свойство имеет значение OFF, но его можно установить в ON при помощи инструкции ALTER DATABASE. Это свойство позволяет уменьшить уязвимость системы перед рядом угроз, связанных с присоединением базы данных.