Автоматическая блокировка учетных записей уволившихся сотрудников
http://www.skladovka.ru/ склад для интернет магазина в москве. www.skladovka.ru |
В больших организациях часто существует потребность отключения учетной записи уволенного сотрудника. Это может быть требование службы безопасности или связано с уменьшением нагрузки на оборудование (в нашем случае мы удаляем почтовый ящик и папку профиля на сервере). Подписывать обходной лист у системного администратора идея не самая хорошая, ведь, во-первых, у отдела кадров нет информации, кого именно направлять в ИТ, а во-вторых, офисов у компании может быть много, и требовать от сотрудника подписи от системного администратора, находящегося в другом городе, невозможно. Тем не менее, несмотря на все очевидные неудобства, как правило, используется такой подход.
Перед нашим отделом руководство поставило такую задачу и я хочу рассказать, как она была решена в конкретном случае.
Были использованы следующие технологии:
- C# для интерфейса. Это моя первая GUI-программа, поэтому в исходниках тихий ужас. Хотя, мой знакомый человек с хабра говорит, что самый значимый критерий программы — работа без глюков (спасибо тебе за помощь, Глеб). Считаю, что я справился.
- SQL-сервер. Используется не на столько, чтобы была важна конкретная реализации.
- Powershell для скриптов. Изначально, интерфейс программы был написан на нем (продукты фирмы SAPIEN сильно в этом помогают). Так же я рекомендую поставить оснастки Quest Software для работы с AD, они бесплатные.
Очевидно, что наиболее актуальная информация о сотрудниках находится в кадровой программе. Следовательно, было решено привязывать сотрудников из этой программе к пользователям в домене. То есть надо знать, что юрист Иван Иванов с табельным номером 1111 – это пользователь домена iivanov, и при его увольнении нужно заблокировать соответствующего пользователя.
Как это сделать? Способов можно найти не так уж много. В нашем случае мы завели отдельную базу в SQL-сервере, в одной таблице мы храним всех пользователей домена, а в другой – всех сотрудников организации. В таблице пользователей есть поле, где хранится код сотрудника. По этому коду как раз и делаем вывод, какой пользователь домена соответствует какому сотруднику в кадрах.
Таблица пользователей заполняется скриптом, который получает всех пользователей домена и заносит в базу данных информацию о почтовом адресе, логину и прочих атрибутах учетной записи, но не трогает поле, в котором содержится информация о кадровом сотруднике (написание такого скрипта проще, чем кажется на первый взгляд). Для служебных учетных записей я в это поле ставлю -1, для заблокированных пользователей есть поле status
, в котором пишем слово disabled
.
Таблицу сотрудников заполняет программист, который сопровождает кадровую программу (я специально не пишу какую, так как она может быть любой) и отвечает за ее актуальность (проверять, не перестала ли эта таблица обновляться, можно триггером for update
, но сейчас речь не об этом).
Таким образом, sql-запрос, которых покажет всех уволенных, но не заблокированных пользователей, может выглядеть приблизительно так:
SELECT samaccountname FROM dbo.ad_users
WHERE (id NOT IN (SELECT id FROM dbo.kadr_users))
AND (id <> -1)
AND (id IS NOT NULL)
and status <> 'disabled'
Задача решена? Еще нет. Ведь как при заведении новой учетной записи указать, что она привязана к сотруднику?
Тут берем в руки шашки и после некоторых усилий получаем что-то вроде этого:
То есть заведение выглядит так: ввел в поле поиска фамилию человека, щелкнул два раза на нужном сотруднике, проставил необходимые галки (опционально) и нажал кнопку создать. Программа уже сама проставит привязку в таблицу с пользователями.
Аппетит приходит во время еды, поэтому на картинке вы видите кнопки копирования групп с другого пользователя, галку создания почтового ящика, произвольный выбор групп, возможность выбора руководителя и местоположения. Так же в учетной записи проставляется юрлицо, отдел и должность.
Так а что с автоматическим увольнением? Скриптом выполняем приведенный выше запрос, идем по результату и делаем все необходимые действия, включая блокировку. Я написал его на powershell. Как бонус можно обновлять отдел и должность пользователей, ведь эта информация может быть полезна и хорошо иметь ее актуальной, а не по состоянию пять лет назад.