gifts2017

Замена пароля пользователям на периферийных базах без участия администратора

Опубликовал Николай Фёдоров (nick_f1982) в раздел Программирование - Практика программирования

Оно конечно ежели, но всё же
Что касательно, то и относительно
И ничего не бывает так чтобы что-нибудь да и случилось,
А случись оно, вот тебе и пожалуйста ...

Идея возникла в обычной рабочей ситуации. Подошёл пользователь ИБ и попросил заменить ему пароль во всех базах (используется система УРБД и в наличии на данный момент  12 периферийных баз). Раньше этим вопросом занимался админ, но в данный момент он оказался в отпуске и пришлось, заданную задачу решать мне. Я начал заходить удалённо на сервера, но вот незадача посыпались проблемы:

1.       Не достаточно прав для доступа на сервер

2.       Обвалился канал и нужно выжидать пока он подымется

3.       Сервер находится не в домене и снова до него не достучаться

4.       И т.д. и т.п. ...

И я пошёл в обход!

1.       Взял компоненту для работы со списком пользователей в конфигураторе UsersDef.dll

2.       Открыл конфигуратор и создал новые элементы метаданных:

 

·         Новый справочник [Подразделения]  (у меня этот элемент был ранее создан, но для тех кто будет использовать данный материал как пример к разработке он понадобится в минимальном, своём, представлении)

Реквизиты:

- Код

- Наименование

 

(Справочник.Подразделения используется для идентификации удалённой торговой точки, и привязанн к пользователю для определения его местоположения (т.е.  в Справочник.Пользователи есть реквизит Подразделение))

 

·         Новая константа           [МеняемПарольПользователям] принимающая значения 0/1 (т.е. функция флага)

 

·         Перечисления               [СатусыИзмененияПароляПользователю]

Значения:

- Изменить

- Готово

 

·         Новый справочник [ЗаменаПароляПользователю]

Реквизиты:

- Подразделение       Тип [Справочник.Подразделения]

- Пользователь           Тип [Справочник.Пользователи]

- Заменил                    Тип [Справочник.Пользователи]

- Пароль                      Тип [Строка / длина 15]

- Статус                        Тип [Перечисления.СатусыИзмененияПароляПользователю]

- Время                        Тип [Строка / длина 8]

- Дата                           Тип [Дата]

- Птп                             Тип [Число / длина 2 / точность 0]

 

3. Добавил код в [модуль формы списка] справочника [ЗаменаПароляПользователю]

 

4. После того, как в конфигурации были добавлены все элементы. Я заполнил Справочник.ЗаменаПароляПользователю необходимыми данными для замены.

  

5. И добавил немного кода в [глобальный модуль]:

 

//************************************************************************** {

Процедура ПриНачалеРаботыСистемы()


 глУстановитьПользователяСистемы(пИмяПользователя); 


 //[Замена пароля пользователям] {
 
 //2-ая часть
 Если (Константа.МеняемПарольПользователям = 1) И (пИмяПользователя = "Администратор") Тогда
  РезультатВыполнения = глВнестиИзмененияВСписокПользователейКонфигуратора();
  Предупреждение(РезультатВыполнения,30);
  Константа.МеняемПарольПользователям = 0;
  СтатусВозврата(0);
  ЗавершитьРаботуСистемы(0);
  Возврат;
 КонецЕсли;

 
 //1-ая часть
 Константа.МеняемПарольПользователям = 0;
 КолвоИзменений = глПроверитьНаличиеДанныхНаИзменениеПароляПользователям();
 Если КолвоИзменений > 0 Тогда
  ТолькоИмя = ПолучитьТолькоИмяПользователя(пИмяПользователя);
  Ответ = Вопрос("Доброго времени суток!
  |" +ТолькоИмя+ ", можно я внесу изменения в список пользователей?
  |Это займёт не больше 1 минуты...","Да+Нет");
  Если Ответ = "Да" Тогда
   Предупреждение("Спасибо " +ТолькоИмя+ "!",2);
   Константа.МеняемПарольПользователям = 1;
   КомандаСистемы(Симв(34) +КаталогПрограммы()+ "1cv7s.exe" +Симв(34)+ " enterprise /d" +КаталогИБ()+ " /nАдминистратор /pПароль");
  Иначе
   ЗаписьЖурналаРегистрации("Пользователь [" +глПользователь+ "] отказал в замене пароля!", "Отказ при замене пароля");
  КонецЕсли;
 КонецЕсли;
 
 //Если изменений нет, то пользователь продолжает работу в обычном режиме
 
 //[Замена пароля пользователям] }

 
            КонецПроцедуры // ПриНачалеРаботыСистемы

            //************************************************************************** {

 

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

Вот таким образом, за 4 часа работы, я избавил себя от этой проблемы навсегда. Cool

 

---

Готовые тексты модулей прикреплены к статье. 

 

//************************************************************************************************************************** }

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
модуль формы списка
.txt 3,97Kb
30.09.09
14
.txt 3,97Kb 14 Скачать
глобальный модуль
.txt 8,25Kb
30.09.09
8
.txt 8,25Kb 8 Скачать
Внешняя компонента UsersDef (данную версию я использовал при разработке)
.rar 194,36Kb
30.09.09
10
.rar 194,36Kb 10 Скачать
Форма списка в виде обработки. Реквизиты формы содержат имена переменных и функции.
.ert 37,00Kb
30.09.09
7
.ert 37,00Kb 7 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Станислав Шепталов (sCHTASS) 28.09.09 12:59
2. Николай Фёдоров (nick_f1982) 30.09.09 09:49
sCHTASS, вы не уловили суть данного решения. При использовании данного алгоритма открывать, периферийные (удалённые), базы даже не требуется в справочнике содержится информация о том что пользователю надо поменять пароль, на каком подразделении и на что менять. Без вмешательста пользователя на принудительных условиях.
Например:
1. Сотрудник вашей компании был уволен и имел доступ ко всем базам.
2. Пароль пользователям можно изменять на принудительных условиях, каждые две недели, для повышения безопастности доступа к данным (У таких пользователей как: Генеральный директор, Финансовый директор, Главный бухгалтер). Исходя из того, что они себе его ни когда не меняют! А в случае утери данных виноват Администратор и Программист. ;)
3. Николай Фёдоров (nick_f1982) 30.09.09 12:47
К статье добавлена обработка, которая содержит реквизиты формы с переменными и функциями.
Реквизиты можно скопировать из обработки и вставить в форму списка, кроме табличной части.
Табличная часть справочника [ЗаменаПароляПользователю] заполняется реквизитами указанными в статье.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа