Тип: Булево. Разрешено использование произвольных внешних компонент. Истина – разрешено использование произвольных внешних компонент. Ложь – допустимо использование только внешних компонентов, перечисленных в списке разрешенных внешних компонент профиля.
Полное описание, параметры и ограничения
АдминистрированиеПрофильБезопасности.ПолныйДоступКВнешнимКомпонентам (AdministrationSecurityProfile.AddInFullAccess)
АдминистрированиеПрофильБезопасности (AdministrationSecurityProfile)
ПолныйДоступКВнешнимКомпонентам (AddInFullAccess)
Доступен, начиная с версии 8.3.14.
Использование:
Чтение и запись.
Описание:
Тип: Булево.
Разрешено использование произвольных внешних компонент.
Истина – разрешено использование произвольных внешних компонент.
Ложь – допустимо использование только внешних компонентов, перечисленных в списке разрешенных внешних компонент профиля.
Доступность:
Тонкий клиент, сервер, толстый клиент, интеграция.
Использование в версии:
Доступен, начиная с версии 8.3.14.
Методическая информация
Практические примеры
Сопоставить полные разрешения учебного профиля с шестью списками
Получаем настоящий назначенный профиль и классифицируем COM, компоненты, модули, приложения, Интернет и файловую систему по полному доступу и числу разрешений.
Где и как запускать
Полный модуль собственной управляемой формы. Только чтение явно выбранной УчебнаяБаза85 в УчебныйКластер85 через loopback ras; запуск в 1С и соединение здесь не выполнялись.
Подготовка
Нужен отдельный собственный серверный стенд 1С 8.5.1.1343 без рабочих баз. Администратор должен заранее установить сервер, запустить совместимый ras и создать кластер с точным именем УчебныйКластер85. Код ничего не устанавливает и не регистрирует.
Запускайте обработку в собственной пустой учебной конфигурации с именем метаданных УчебнаяКонфигурацияСинтаксиса. Серверное выполнение должно находиться на той же машине, что собственный ras: код разрешает только 127.0.0.1. Это адрес сервера выполнения, не обязательно компьютера тонкого клиента.
ПортRAS возьмите из фактического запуска своего ras, не из порта ragent или рабочего процесса. Например, 1545 подходит только если именно этот порт настроен на вашем стенде. Используйте законные учётные данные своего агента и своего кластера; пустые допустимы только для намеренно настроенного учебного стенда без соответствующих администраторов.
В первый раз оставьте ИдентификаторКластера пустым: появится JSON только с кластерами УчебныйКластер85. Скопируйте настоящий UUID из результата, вновь введите очищенные пароли и повторите команду. Кластер выбирается одновременно по UUID и точному учебному имени; чужой кластер не принимается.
Выполняйте каждый урок отдельно. JSON формируется в памяти и показывается только на своей форме; код не сохраняет файлы, не пишет настройки кластера, не прерывает сеансы и не запускает команды ОС. Он выполняет сетевое обращение к своему локальному ras только если вы сами запустите его на подготовленном стенде.
Здесь подключение к ras и запуск в 1С не выполнялись. Проверены тексты, сигнатуры и привязки к локальной справке 8.5.1.1343. Пройдите контрольные действия сами только на своём учебном стенде.
Штатными средствами заранее зарегистрируйте в своём УчебныйКластер85 только собственную УчебнаяБаза85 с этой учебной конфигурацией. Код не создаёт базу, СУБД, пользователя, профиль или разрешение.
В управляемой форме обработки создайте ПортRAS — Число без дробной части; ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИдентификаторУчебнойБазы, ИмяАдминистратораБазы, ПарольАдминистратораБазы, JSONРезультат — Строка. У JSONРезультат длина 0.
Выведите реквизиты на форму. Для всех трёх полей паролей включите Режим пароля, не сохраняйте их в истории и настройках; JSONРезультат — многострочное поле просмотра. Создайте команду ПолучитьУчебныйСнимок и вставьте весь приведённый модуль формы.
Первый запуск с пустым UUID кластера возвращает только каталог УчебныйКластер85. Второй с настоящим UUID кластера и пустым UUID базы — только каталог УчебнаяБаза85. Третий — с обоими подтверждёнными UUID и законными учётными данными пользователя-администратора своей базы.
Учётные данные агента, администратора кластера и пользователя информационной базы — три разные пары. Не подставляйте имя кластера вместо логина. После каждого результата или ошибки все три пароля очищаются, для повторного запроса введите их заново.
Для двух уроков самого профиля заранее штатными средствами своего стенда создайте и назначьте УчебнаяБаза85 обычный профиль УчебныйПрофиль85. Возможность работы с профилями должна быть доступна на вашем лицензированном стенде; код не обходит её ограничения.
Списки разрешений, роли и модули проверяются только как настройки. COM, внешние приложения, файлы, криптография и внешние веб-сервисы в примерах не запускаются. Снимок в памяти не проверяет фактический доступ или отказ.
&НаКлиенте
Процедура ПолучитьУчебныйСнимок(Команда)
Попытка
JSONРезультат = УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера,
ИдентификаторУчебнойБазы, ИмяАдминистратораБазы, ПарольАдминистратораБазы);
Исключение
JSONРезультат = "Снимок не получен. Проверьте собственный стенд, порт, UUID кластера и базы, учебные имена и права администраторов. Подробную серверную ошибку исследуйте в отладчике без публикации учётных данных.";
КонецПопытки;
ПарольАгента = "";
ПарольАдминистратораКластера = "";
ПарольАдминистратораБазы = "";
КонецПроцедуры
&НаСервереБезКонтекста
Функция УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера,
ИдентификаторУчебнойБазы, ИмяАдминистратораБазы, ПарольАдминистратораБазы)
Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
ВызватьИсключение "Порт ras должен быть числом";
КонецЕсли;
Если ПортRAS <> Цел(ПортRAS) Или ПортRAS < 1 Или ПортRAS > 65535 Тогда
ВызватьИсключение "Недопустимый порт собственного ras";
КонецЕсли;
ТекстовыеПараметры = Новый Массив;
ТекстовыеПараметры.Добавить(ИмяАгента);
ТекстовыеПараметры.Добавить(ПарольАгента);
ТекстовыеПараметры.Добавить(ИдентификаторКластера);
ТекстовыеПараметры.Добавить(ИмяАдминистратораКластера);
ТекстовыеПараметры.Добавить(ПарольАдминистратораКластера);
ТекстовыеПараметры.Добавить(ИдентификаторУчебнойБазы);
ТекстовыеПараметры.Добавить(ИмяАдминистратораБазы);
ТекстовыеПараметры.Добавить(ПарольАдминистратораБазы);
Для Каждого ТекстовыйПараметр Из ТекстовыеПараметры Цикл
Если ТипЗнч(ТекстовыйПараметр) <> Тип("Строка") Тогда
ВызватьИсключение "Учётные данные и UUID должны быть строками";
КонецЕсли;
КонецЦикла;
Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
Кластеры = Агент.ПолучитьКластеры();
Если ПустаяСтрока(СокрЛП(ИдентификаторКластера)) Тогда
Каталог = Новый Массив;
Для Каждого Найденный Из Кластеры Цикл
Если Найденный.Имя = "УчебныйКластер85" Тогда
СтрокаКаталога = Новый Структура;
СтрокаКаталога.Вставить("UUID", Строка(Найденный.ИдентификаторКластера));
СтрокаКаталога.Вставить("Имя", Найденный.Имя);
Каталог.Добавить(СтрокаКаталога);
КонецЕсли;
КонецЦикла;
Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеКластеры", Каталог));
КонецЕсли;
Кластер = Неопределено;
Совпадений = 0;
Для Каждого Найденный Из Кластеры Цикл
Если НРег(Строка(Найденный.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера))
И Найденный.Имя = "УчебныйКластер85" Тогда
Кластер = Найденный;
Совпадений = Совпадений + 1;
КонецЕсли;
КонецЦикла;
Если Совпадений <> 1 Тогда
ВызватьИсключение "Нужен один собственный учебный кластер с подтверждённым UUID";
КонецЕсли;
Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
Снимок = Новый Структура;
Снимок.Вставить("UUIDКластера", Строка(Кластер.ИдентификаторКластера));
Снимок.Вставить("ИмяКластера", Кластер.Имя);
Базы = Кластер.ПолучитьИнформационныеБазы();
Если ПустаяСтрока(СокрЛП(ИдентификаторУчебнойБазы)) Тогда
КаталогБаз = Новый Массив;
Для Каждого КандидатБазы Из Базы Цикл
Если ТипЗнч(КандидатБазы) <> Тип("АдминистрированиеИнформационнаяБаза") Тогда
ВызватьИсключение "Ожидалось описание информационной базы";
КонецЕсли;
Если КандидатБазы.Имя = "УчебнаяБаза85" Тогда
ЗаписьКаталога = Новый Структура;
ЗаписьКаталога.Вставить("UUID", Строка(КандидатБазы.ИдентификаторИнформационнойБазы));
ЗаписьКаталога.Вставить("Имя", КандидатБазы.Имя);
КаталогБаз.Добавить(ЗаписьКаталога);
КонецЕсли;
КонецЦикла;
Снимок.Вставить("УчебныеБазы", КаталогБаз);
Возврат СериализоватьСвойСнимок(Снимок);
КонецЕсли;
База = Неопределено;
СовпаденийБазы = 0;
Для Каждого КандидатБазы Из Базы Цикл
Если ТипЗнч(КандидатБазы) <> Тип("АдминистрированиеИнформационнаяБаза") Тогда
ВызватьИсключение "Ожидалось описание информационной базы";
КонецЕсли;
Если КандидатБазы.Имя = "УчебнаяБаза85"
И НРег(Строка(КандидатБазы.ИдентификаторИнформационнойБазы)) = НРег(СокрЛП(ИдентификаторУчебнойБазы)) Тогда
База = КандидатБазы;
СовпаденийБазы = СовпаденийБазы + 1;
КонецЕсли;
КонецЦикла;
Если СовпаденийБазы <> 1 Тогда
ВызватьИсключение "Нужна одна собственная УчебнаяБаза85 с подтверждённым UUID";
КонецЕсли;
База.ВыполнитьАутентификацию(ИмяАдминистратораБазы, ПарольАдминистратораБазы);
Снимок.Вставить("UUIDБазы", Строка(База.ИдентификаторИнформационнойБазы));
Снимок.Вставить("ИмяБазы", База.Имя);
Если База.ПрофильБезопасности <> "УчебныйПрофиль85" Тогда
ВызватьИсключение "Для урока нужен заранее назначенный своей базе УчебныйПрофиль85";
КонецЕсли;
Профиль = Неопределено;
СовпаденийПрофиля = 0;
Для Каждого КандидатПрофиля Из Кластер.ПолучитьПрофилиБезопасности() Цикл
Если ТипЗнч(КандидатПрофиля) <> Тип("АдминистрированиеПрофильБезопасности") Тогда
ВызватьИсключение "Ожидалось описание профиля безопасности";
КонецЕсли;
Если КандидатПрофиля.Имя = "УчебныйПрофиль85" Тогда
Профиль = КандидатПрофиля;
СовпаденийПрофиля = СовпаденийПрофиля + 1;
КонецЕсли;
КонецЦикла;
Если СовпаденийПрофиля <> 1 Тогда
ВызватьИсключение "Нужен один собственный заранее зарегистрированный учебный профиль";
КонецЕсли;
Снимок.Вставить("ИмяПрофиля", Профиль.Имя);
Снимок.Вставить("ОписаниеПрофиляЗаполнено", Не ПустаяСтрока(Профиль.Описание));
Категории = Новый Массив;
Категории.Добавить(ОписатьКатегориюДоступа("COM", Профиль.ПолныйДоступКCOMОбъектам,
Профиль.ПолучитьРазрешенныеCOMКлассы().Количество()));
Категории.Добавить(ОписатьКатегориюДоступа("Внешние компоненты", Профиль.ПолныйДоступКВнешнимКомпонентам,
Профиль.ПолучитьРазрешенныеВнешниеКомпоненты().Количество()));
Категории.Добавить(ОписатьКатегориюДоступа("Внешние модули", Профиль.ПолныйДоступКВнешнимМодулям,
Профиль.ПолучитьРазрешенныеВнешниеМодули().Количество()));
Категории.Добавить(ОписатьКатегориюДоступа("Внешние приложения", Профиль.ПолныйДоступКВнешнимПриложениям,
Профиль.ПолучитьРазрешенныеВнешниеПриложения().Количество()));
Категории.Добавить(ОписатьКатегориюДоступа("Интернет", Профиль.ПолныйДоступКИнтернетРесурсам,
Профиль.ПолучитьРазрешенныеИнтернетРесурсы().Количество()));
Категории.Добавить(ОписатьКатегориюДоступа("Файловая система", Профиль.ПолныйДоступКФайловойСистеме,
Профиль.ПолучитьРазрешенныеВиртуальныеКаталоги().Количество()));
Снимок.Вставить("Категории", Категории);
Снимок.Вставить("ШестьКатегорий", Категории.Количество() = 6);
Снимок.Вставить("КриптографияНаСервереРазрешена", Профиль.ДоступККриптографии);
Снимок.Вставить("ПригоденДляБезопасногоРежима", Профиль.ПрофильБезопасногоРежима);
Снимок.Вставить("ЛюбойВнешнийКодМожетЗапускатьсяБезБезопасногоРежима", Профиль.РазрешитьВыполнениеВнешнегоКодаВНебезопасномРежиме);
Снимок.Вставить("ПриЛожьНебезопасногоРежима", "Это не полный запрет: по справке без безопасного режима могут запускаться разрешённые внешние модули");
Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции
&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
Писатель = Новый ЗаписьJSON;
Писатель.УстановитьСтроку();
ЗаписатьJSON(Писатель, Снимок);
Возврат Писатель.Закрыть();
КонецФункции
&НаСервереБезКонтекста
Функция ОписатьКатегориюДоступа(Категория, ПолныйДоступ, ЧислоРазрешений)
СтрокаДоступа = Новый Структура;
СтрокаДоступа.Вставить("Категория", Категория);
СтрокаДоступа.Вставить("ПолныйДоступ", ПолныйДоступ);
СтрокаДоступа.Вставить("ЧислоРазрешений", ЧислоРазрешений);
Если ПолныйДоступ Тогда
СтрокаДоступа.Вставить("Толкование", "Любые ресурсы категории; список не ограничивает полный доступ");
ИначеЕсли ЧислоРазрешений = 0 Тогда
СтрокаДоступа.Вставить("Толкование", "Полный доступ выключен и разрешённых элементов категории нет");
Иначе
СтрокаДоступа.Вставить("Толкование", "Полный доступ выключен; требуется совпадение со списком разрешений");
КонецЕсли;
Возврат СтрокаДоступа;
КонецФункции
Разбор по шагам
До подключения проверяется имя учебной конфигурации, целочисленный диапазон порта и строковые типы всех восьми текстовых аргументов.
Сначала выбирается кластер по имени и UUID, затем база по своему отдельному имени и UUID. Пустой UUID даёт учебный каталог, не выбор первого элемента.
Аутентификация агента и кластера не подменяет пользователя базы. После точного выбора выполняется отдельная аутентификация в собственной базе.
Результат строится из простых значений, массивов и структур. UUID и даты представлены текстом; пароли и сырые серверные ошибки в JSON не попадают.
Перед чтением профиля проверяем, что своей базе назначен именно УчебныйПрофиль85. Профиль выбирается по единственному точному имени и проверяется его тип.
Шесть методов ПолучитьРазрешенные возвращают фактические массивы. Не создаём фиктивные записи и не считаем количество записей числом успешно выполненных операций.
При полном доступе разрешены любые ресурсы соответствующей категории. Наличие или отсутствие записей разрешений не превращает полный доступ в ограниченный.
При выключенном полном доступе пустой список означает отсутствие перечисленных разрешений, непустой — необходимость совпадения с конкретным разрешением. Это не оценка всего доступа пользователя.
ДоступККриптографии относится к серверу; клиентская криптография этим флагом не блокируется. ПрофильБезопасногоРежима указывает пригодность профиля, не факт запуска команды в этом режиме.
Разрешение внешнего кода вне безопасного режима рассматривается отдельно от списков и полного привилегированного режима. Ложь не означает полного запрета: разрешённые внешние модули остаются отдельным случаем. Проверку реального исполнения не выполняем.
Как проверить результат
В результате должны быть именно подтверждённые UUID и имена своего учебного кластера и базы, а не первый зарегистрированный объект.
Неверный UUID, чужое имя, неверный тип аргумента или порт вне диапазона должны дать безопасное сообщение; ни одна команда изменения кластера или базы не вызывается.
После любого исхода три поля паролей пустые. Проверяйте только на отдельном собственном стенде: запуск в 1С здесь не выполнялся.
В Категории ровно шесть строк, ШестьКатегорий — Истина. Их количество разрешений должно совпадать со штатной консолью своего стенда.
Уже настроенные варианты полный доступ / нет записей, ограниченный / нет записей и ограниченный / есть записи получают разные толкования.
Профиль не меняется. Не создаются COM, внешняя компонента, приложение, Интернет-запрос, файл или криптографическая операция.
Описание профиля представлено только признаком заполненности. Списки читаются, но их ресурсные строки не раскрываются в этом снимке.
Ожидаемый результат
Получен связный аудит шести категорий и дополнительных флагов без опасной проверки ресурсов исполнением.
На что обратить внимание
127.0.0.1 относится к машине серверного исполнения формы, не обязательно к ПК тонкого клиента. Не заменяйте адрес рабочим сервером.
Имена — защитные учебные маркеры, UUID — подтверждённые идентификаторы. Код не устанавливает ras, не выбирает первого кандидата и не регистрирует недостающие объекты.
Чтение настроек не является проверкой доступа, работоспособности СУБД, выполнения задания или отсутствия других способов получения лицензии.
Ни Записать, ни Удалить, ни прекращение сеанса, ни создание ресурса не вызываются. Изменения для самостоятельных сравнений допускаются только штатными средствами собственного учебного стенда.
Статическая сверка и успешная сборка справочника не означают реальное подключение: тексты примеров в 1С не запускались.
Счётчик разрешений не проверяет шаблоны, ключи, хеши и фактическое совпадение ресурса. Нельзя заявлять, что любой ресурс разрешён лишь потому, что список непустой.
Включённый ПрофильБезопасногоРежима не подменяет назначение безопасного профиля базы. Этот урок исследует её обычный УчебныйПрофиль85.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.