Программная установка пароля пользователяИБ
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ТекущийПользователь.Пароль = Пароль;
ТекущийПользователь.Записать();
ТекущийПользовательИБ = ТекущийПользователь;
Сообщить(ТекущийПользователь.ПарольУстановлен);
Сообщить(ПользователиИнформационнойБазы.ТекущийПользователь().ПарольУстановлен);
Результат в окне сообщений:
Объясните, почему так? Для тек пользователя пароль установил, а второе сообщить как то странно себя ведет.
Обработка временной или постоянной замены пароля Аутентификации 1С: Предприятия 8.2-8.3
Простенькая обработка на управляемых и обычных формах под платформу 8.2-8.3, позволяющая сменить пароль Аутентификации 1С: Предприятия и вернуть обратно. Будет полезна администраторам, программистам, связанным с 1С.
Недавно столкнулся с проблемой, которая потребовала простенького решения. Собственно, проблему можно уместить в один вопрос: как помочь пользователю, не зная и не сбрасывая его пароль?
Во многих конторах, чтобы воспроизвести ошибку, администраторы, программисты и прочие технические специалисты пользовались Аутентификацией 1С: Предприятия. То есть пользователь «жаловался» на ошибку, под ним заходили специалисты и пытались воспроизвести ошибку. Получали ошибку и исправляли ее в коде.
С развитием мобильной платформы и мобильных клиентов Аутентификация 1С: Предприятия становится «занята» пользователем, так как синхронизация проходит именно по ней. То есть не каждый пользователь захочет разглашать свои пароли или пользоваться тем паролем, что ему «назначили». Наша контора также все больше и больше подвязывается с мобильными клиентами. Вот тут и возник упомянутый ранее вопрос.
Я перерыл просторы интернета, нашел кучу описаловок как ломать пароли в файловой БД или в серверных версиях.
В случае с файловой версией не нужно ни каких прав достаточно установить программу просмотра файлов баз *.1CD и меняем пароли в таблице V8USERS. Стоит заметить, что пароли там хранятся не в чистом виде, а хранится хеш пароля. Собственно хеш неизвестного пароля меняется на хеш известного пароля. В случае серверных баз нужно знать логин администратора БД и там уже дело не хитрое поменять пароль. Но как объяснить пользователю ошибку аутентификации после таких взломов? Да и к чему такие трудности?
Нашел так же обработку, которая подбирает пароли при этом требует такие же права как и моя обработка. Ну подбирает пароль 123 или даже 123456 она быстро, а что если пароль настоящий? Она пишет около 90 дней буду подбирать. Это не в какие ворота! Может выйти такая ситуация, пока подбирали пароль, пользователь сменил пароль. Да еще и не 1 раз может сменить.
В общем предлагаю небольшую обработку, которая меняет хеш неизвестного пароля на хеш желаемого пароля, а затем подменяет обратно. Работает она как в Управляемых формах, так и под обычные формы. Может быть встроена через «дополнительные обработки и отчеты», процедура в модуль объекта с описанием обработки добавлена.
Ну или можно встроить через «Расширения конфигурации» — очень полезная возможность, на данный момент позволяет добавлять обработки и отчеты в конфигурацию не снимая ее с поддержки. То есть типовая конфигурация остается типовой даже при добавлении обработки.
Принцип работы:
По пользователю получаем хеш пароля.
//Пользователь элемент справочника Пользователи
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
//СохраняемоеЗначениеПароля хранит хеш пароля
ПарольПользователя = ПользовательИБ.СохраняемоеЗначениеПароля;
//Имя хранит логин пользователя
ЛогинПользователя = ПользовательИБ.Имя;
Работа с паролями пользователей в 1С
Для того чтобы программно задать пароль пользователя в 1С, нужно сначала получить нужного пользователя информационной базы. Для этого используется метод НайтиПоИмени() менеджера пользователей информационной базы.
Установка нового пароля
Для установки нового пароля пользователя 1С, его нужно записать в свойство Пароль пользователя информационной базы. Это свойство недоступно для чтения, поэтому, записав туда пароль, прочитать его уже не удастся.
После установки пароля свойство ПарольУстановлен пользователя информационной базы примет значение Истина. Пароль начнет работать после перезапуска системы.
Установка требований к сложности пароля в 1С
Система 1С:Предприятие имеет встроенный механизм проверки сложности паролей пользователей. Функция включается через Конфигуратор, меню Администрирование — Параметры информационной базы — Проверка сложности паролей пользователей.
При включении этой функции пароль проверяется на соответствие следующим требованиям:
- Длина не менее 7 символов;
- Содержит не менее 3-х типов символов:
-
- заглавные буквы;
- строчные буквы;
- цифры;
- спец. символы.
- Не совпадает с именем пользователя;
- Не является последовательностью символов.
Можно включить эту функцию программно:
Для проверки вводимого пользователем пароля на соответствие этим требованиям попытаемся создать временного пользователя с заданным паролем. В функцию мы будем передавать сам новый пароль. Функция будет возвращать значение Истина, если пароль соответствует требованиям, и Ложь — если не соответствует.
Функция ПарольСоответствуетТребованиям ( Пароль )
//Убедимся, что проверка сложности включена
УстановитьПроверкуСложностиПаролейПользователей ( Истина ) ;//Создадим временного пользователя и установим его параметры
ВременныйПользовательИБ = ПользователиИнформационнойБазы . СоздатьПользователя ( ) ;
ВременныйПользовательИБ . АутентификацияСтандартная = Истина ;
ВременныйПользовательИБ . Имя = НСтр ( "ru = ‘Временный пользователь’" ) +
" (" + Строка ( Новый УникальныйИдентификатор ) + ")" ;//Установим временному пользователю требуемый пароль
ВременныйПользовательИБ . Пароль = Пароль ;//Попытаемся записать временного пользователя.
//Если появится ошибка, значит пароль не соответствует требованиям
ХорошийПароль = Истина ;//Удалим временного пользователя
ВременныйПользовательИБ . Удалить ( ) ;Как программно проверить пароль пользователя 1С
Как мы уже отмечали, свойство Пароль пользователя информационной базы недоступно для чтения, то есть мы не сможем при необходимости просто сравнить пароль, введенный пользователем, с паролем, который хранится в информационной базе.
Пароль из информационной базы мы можем получить только в хешированном виде через свойство СохраняемоеЗначениеПароля пользователя ИБ.
Для проверки соответствия введенного пароля паролю из информационной базы можно использовать следующую функцию. В нее мы передадим введенный пароль и имя пользователя. Функция вернет значение Истина, если пароль соответствует паролю информационной базы, и Ложь — если не соответствует.
Функция ПроверитьПароль ( Пользователь , Пароль )
//Получим пользователя ИБ
ПользовательИБ = ПользователиИнформационнойБазы . НайтиПоИмени ( Пользователь ) ;//Получим хешированное представление введенного пароля
ХешированиеДанных = Новый ХешированиеДанных ( ХешФункция . SHA1 ) ;
ХешированиеДанных . Добавить ( Пароль ) ;
ХешированныйНовыйПароль = Base64Строка ( ХешированиеДанных . ХешСумма ) ;
ХешированиеДанных = Новый ХешированиеДанных ( ХешФункция . SHA1 ) ;
ХешированиеДанных . Добавить ( ВРег ( Пароль ) ) ;
ХешированныйНовыйПароль = ХешированныйНовыйПароль + "," + Base64Строка ( ХешированиеДанных . ХешСумма ) ;//Сравним полученный хешированный пароль и хешем пароля в информационной базе
Возврат ХешированныйНовыйПароль = ПользовательИБ . СохраняемоеЗначениеПароля ;Как программно установить пароль пользователя 1с
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ТекущийПользователь.Пароль = Пароль;
ТекущийПользователь.Записать();
ТекущийПользовательИБ = ТекущийПользователь;
Сообщить(ТекущийПользователь.ПарольУстановлен);
Сообщить(ПользователиИнформационнойБазы.ТекущийПользователь().ПарольУстановлен);Результат в окне сообщений:
Объясните, почему так? Для тек пользователя пароль установил, а второе сообщить как то странно себя ведет.
Программное добавление пользователей в базы на БСП
Клиент заказал скрипт для Обновлятора для создания пользователей и назначения им прав в конфигурации на БСП — в БП3 и ЗУП3.
Для начала проверим, как все работает в БП3, наверное в ЗУП3 должно работать аналогично? Если там будет своя специфика, то поправим на месте.
Вообще говоря, 1С предполагает ручное создание пользователей и прав и тема автоматизации этого процесса не документирована, а значит, требуется разбираться и смотреть, что можно использовать из готового кода 1С.
Ручное создание пользователя
Создадим пользователя вручную:

Добавим ему права путем включения в нужную группу доступа:

При всех этих манипуляциях я запустил замер производительности и при запуске 1С выключил режим отладки, чтобы не запускало фоновые задания.
Таким образом я нашел код, где программа создает/обновляет пользователя:


Этот код дает нам примерное понимание, как создавать пользователя программно.
Программное включение/исключение пользователя в группы доступа. Неоптимальное
Теперь нужно разобраться, как включить пользователя в группы доступа. Для этого, на самом деле я не анализировал БСП, а посмотрел ссылки на созданного пользователя в базе:

Пользователям назначаются почему-то персональные группы доступа:


Теперь проверяем — если мы снимаем галочку, то права доступа очищаются:

Очищаются они и в конфигураторе:
Теперь попробуем программно изменить группу доступа, написав такой код:
Получилось, при первом запуске у пользователя включилась и группа доступа:

И появились роли в конфигураторе:

Проверил, что повторный запуск кода убирает группу доступа и роли в конфигураторе.
Программное включение/исключение пользователя в группы доступа. Правильное
Пока я разбирался с группами доступа, задал вопрос на Мисте и мне подсказали, как более просто включать пользователя в группы доступа.
Получается, можно указать просто название профиля доступа, а 1С сама сделает всю «грязную работу».
В функции ВключитьПрофильПользователю можно указывать идентификатор профиля, но к сожалению, предопределенный только один Администратор:

Поэтому для универсальности будем искать профиль по наименованию:
Проверки и тестирование показали, что нужные профили подключаются к пользователю и нужные роли создаются у пользователя информационной базы. При этом должны создаваться сами и группы, если их нет. Это упрощает нашу работу.
Программное создание пользователя и назначение ему прав доступа
Попробуем создать пользователя ГБ3 программно и назначить права доступа:
Проверяем — пользователь и пользователь ИБ созданы:

Причем код можно запускать многократно и при этом обновляются свойства пользователя ИБ. Например, я при первом запуске не добавил свойство «Показывать в списке выбора», добавил и при втором запуске оно установилось.
Также устанавливаются роли и профили групп доступа.
Зайдем под этим пользователем в программу — все ОК, входит нормально.
Теперь настало время проверить, как код работает в Обновляторе. Код смотрите в конце статьи.
Скрипт отработал успешно:

Проверяем, при входе в базу пользователь есть, под пользователем в базу заходит:

В списке пользователей пользователь есть:

Права те, что заказывали:

Как быть с не упрощенными правами (ЗУП3)
Аналогично проверяем на ЗУП 3, получаем ошибку:

Опять берем монитор производительности и находим, что в группы добавление происходит в общей форме Пользователи, в процедуре «ВключитьИсключитьИзГруппы«:

К сожалению (и это недостаток 1С), эта процедура не вынесена в общий модуль, но она несложная и ее можно упрощенно вставить даже в наш код.
В итоге получился универсальный код, который работает и для упрощенной и для не упрощенной системы прав.
В упрощенной каждому профилю и пользователю ставится в соответствие персональная группа доступа. В не упрощенном в одну группу доступа можно включать несколько пользователей.
Проверяем — код в ЗУП3 тоже работает:

Итоговый код скрипта для Обновлятора
Важно! Если добавляете администратора и других пользователей, начинайте с администратора, т.к. иначе получите ошибку, что вы не создали администратора.
Вот какой код получился:
Как видно, можно использовать один скрипт для разных баз, прописывая пользователей для разных типов баз (БП, ЗУП) отдельно.
Если в скрипте у Вас возникнут ошибки и вы захотите отладиться, это будет проблематично во внешнем соединении, поэтому просто удалите из кода все строки «v8.» и замените NewObject на Новый, тогда можно будет запускать код в обычной консоли кода.
Как программно установить пароль пользователя 1с
Продолжая тему администрирования 1С, начатую в прошлом уроке, посвященного списку пользователей в 1С, сегодня мы хотели бы обсудить основные аспекты использования паролей в 1С.

Пароли в 1С используются во множестве мест, в том числе и для ограничения доступа при входе в 1С, для запароливания модулей. Особенно хотелось бы коснуться безопасности внутренних паролей конфигурации, которые не являются стандартными и организовываются программистами для своих нужд.
Также обсудим управление паролями пользователей в 1С – как снять или поменять пароль 1С.
Авторизация – это процесс идентификации себя в программе (то есть ввода имени пользователя и пароля).
Авторизация 1С бывает двух видов:
- Обычный 1С
Чтобы войти в 1С, пользователь должен выбрать имя пользователя и ввести пароль 1С. - По пользователю Windows/домена
В настройках пользователя можно указать соответствие пользователя 1С – пользователю Windows (локальному или сетевому). Когда 1С запускается под аккаунтом этого пользователя – 1С не спрашивает пароль.

В обоих случаях у пользователя может быть задан пароль в 1С, но во втором случае он просто не используется (то есть не запрашивается у пользователя).
Подробнее про включение/отключение этого режима Вы можете почитать в уроке, посвященному управлением пользователей в 1С.
Если используется веб клиент (или тонкий клиент в режиме HTTP), то авторизация производится сложнее, так как в этом случае перед тем, как получить доступ к 1С (и авторизироваться в ней) – пользователю необходимо авторизироваться на веб сервере, который предоставляет сервис доступа к 1С.
Авторизация веб сервера может быть простая (еще один ввод имени пользователя и пароля) или сложная (различные варианты, в том числе по пользователю домена, по сертификатам и т.п.).
Сменить пароль 1С или снять пароль 1С
Пользователь может самостоятельно сменить пароль 1С (зависит от конфигурации, в большинстве типовых конфигураций это возможно).
В конфигурациях толстого клиента (старая 1С) для этого под правами пользователя нужно выбрать пункт меню Сервис/Параметры пользователя и ввести новый пароль 1С (старый пароль 1Спри этом вводить не нужно). Если этого пункта меню нет – значит он отключен администратором.

В конфигурациях тонкого клиента (новая 1С) аналогичные действия возможны если у Вас доступна закладка Администрирование. Выберите на этой закладке пункт меню (справа вверху) Настройки/Персональные настройки/Сведения о пользователе.

Если Вы сами являетесь администратором, то поменять пароль пользователя 1С можно следующими способами:
-
Войти в конфигуратор, пункт меню Администрирование/Пользователи. Войти в любого пользователя и задать пароль 1С. Старый пароль 1С при этом вводить не нужно.
Если Вы забыли свой пароль 1С, то возможно его обнулить, изучите для этого урок 1С SQL.
Пароль 1С на модуль
Самый простой способ защитить текст программ на языке 1С (текст модуля 1С) – это установить пароль 1С на доступ к модулю. Текст модуля при этом шифруется. К сожалению любой модуль защитить так нельзя.
Установить пароль 1С можно:
- Откройте в конфигураторе нужный модуль
- Пункт меню Текст/Установить пароль

Если при этом 1С заявляет, что «Данный модуль защитить нельзя», или этого пункта меню нет, значит нужно выносить функции и процедуры модуля в другой и защищать его. Запаролить как минимум можно модуль объекта и общий модуль.
Способ защиты модуля без пароля – исключить текст программы вообще. Дело в том, что текст программы перед выполнением компилируется (преобразуется в специальный нечитаемый вид). Можно убрать текст модуля, оставив только скомпилированный «код».
Для этого выберите пункт меню Конфигурация/Поставка конфигурации/Настройка поставки и выберите у нужных модулей Исключать тексты модулей. В частности это можно сделать с обработкой, а потом сохранить ее во внешнюю (правой кнопкой на обработку, Сохранить как внешнюю обработку).

Оба способа, к сожалению, обходятся распространенными в интернет декомпиляторами 1С, которые позволяют из компилированного «кода» восстановить текст программы.
Пароль для обновления 1С
При попытке обновления 1С онлайн (Конфигурация/Поддержка/Обновить конфигурацию), 1С спросит у Вас пароль доступа к сайту обновлений.
При покупке конфигурации 1С, в большой желтой коробке, кроме компакт диска и книг будет конверт с ПИН кодом. Кроме него Вам понадобиться регистрационный номер конфигурации (написан на коробке или в документах на покупку). Если по каким то причинам регистрационный номер не найден – попробуйте позвонить в тех. поддержку 1С.
Итак, найдя оба номера, зайдите на сайт 1С (http://users.v8.1c.ru/getpswbase.jsp) и самостоятельно зарегистрируйтесь. В результате Вы получите пароль для получения загрузки и установки обновлений.
Пароли на форме 1С
Иногда в процессе разработки конфигурации, программисту требуется создать механизм доступа к другой базе данных или другому ПО или просто защитить часть конфигурации дополнительным вводом пароля.
Для этого в свойствах поля ввода есть свойство Режим пароля. Поле, с установленной галочкой будет показывать звездочку (*) вместо символов при вводе.

Сам пароль при этом по умолчанию будет храниться в обычном реквизита справочника/документа, со всеми отсюда вытекающими (возможность просмотра с помощью внешней обработки или запроса к данным, просмотра в таблице SQL этого справочника).
Подробнее про организацию форм, установку свойств полей на форме и связь полей с реквизитами справочников и документов см. здесь – формы толстого клиента и тонкого клиента.
Программное добавление, удаление пользователей 1С
Доступ пользователей к информационной базе 1С, осуществляется при помощи авторизации. Для каждого работника создается объект пользователь, под которым осуществляется вход и работа в системе. Поэтому, для того чтобы работник мог войти в базу, ему необходимо знать логин и пароль. Редактирование логина, пароля и другой информации о пользователе доступно в 1С конфигураторе, а в типовых конфигурациях можно настраивать и в 1С предприятии. Таким образом, добавление, удаление, редактирование и настройка пользователей осуществляется через интерфейс программы 1С. Все эти действия могут быть выполнены программно, с помощью средств встроенного языка 1С.
Программный доступ к пользователям
Во встроенном языке программирования, предусмотрены специальные объекты для добавления, редактирования и удаления пользователей системы. Работа с пользователями осуществляется через свойство глобального контекста ПользователиИнформационнойБазы.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться