Показать сообщение отдельно
Старый 15.11.2013, 10:53   #11  
erp_man
Гость
 
n/a
Реальная постановка - ниже. используем cu1.
политики MS SQL естественно отключены.
по п3: вообще-то формочку для смены пароля можно открывать из кода, появились какие-то новые триггера в 2009....
но я не помню как они называются)


1. Есть таблица на уровне сервера (в msdb) и точно такие же таблицы на уровне каждой БД. Таблица, на данный момент, содержит:
- имя юзера,
- признак, что пароль требуется сменить,
- дату последней смены пароля этим юзером.

1.1. Изначально неким скриптом надо добавить в эту табличку юзеров, с указанием последней даты изменения пароля (если мы хотим, чтобы их пароли менялись в разные дни - изначально рисуем тут разные даты).

1.2. При вводе нового пользователя (логин БД) обязательно добавляем его в эту глобальную таблицу. Это можно дописать в какой-то триггер (скрипт по раздаче прав, запускаемый админами), чтобы админам не делать это вручную.

1.3. Добавим в некую глобальную таблицу на сервере вне базы настройку "Периодичность изменения пароля (дни)" (Именно на сервере, т.к. логин/пароль у пользователя общие для всего сервера, а не разные для каждой базы). Вводим туда некое число, например, 60 дней. Это надо сделать на каждом сервере, на котором существуют рабочие логины БД, т.е. все, кроме ВЦ.

2. При входе пользователя БД в систему (для пользователей win этих проверок быть не должно):
2.1. Данные из глобальной таблички по нему подтягиваются в локальную табличку БД.
Если такого пользователя нет в глобальной таблице, то в базу его не пускаем, выдаем сообщение: "Доступ в базу по данному логину настроен некорректно. Обратитесь к администраторам ЦО."

2.2. Проверяем по локальной табличке «последнее изменение пароля» + "кол-во дней указанное в настройке периодичности смены пароля" дает день равный или больший текущего серверного - то для данной строки/логина глоб.таблички проставляем галку в поле "признак, что пароль требуется сменить".
!!!ВАЖНО: Как я понимаю, в данном случае это будет не серверное время, а время установленное на ПК пользователя! В этом минус данного решения по сравнению с предыдущим.

3. На уровне БД (при входе пользователя в систему) происходит проверка, которая дает ошибку, если текущий пользователь должен сменить пароль. С описанием того, где это можно сделать.
Меню Инструменты -> Безопасность -> Пароль. Надо будет также сделать подробную инструкцию (разместить в РП) - как сменить пароль, т.к. сейчас у нас некоторые пользователи даже фирму открывать не умеют, недавно заявка была. Этим, видимо, мне надо заняться J

4. Пользователь меняет пароль. Триггер отлавливает событие и заносит данные о том, что пароль изменен в глобальную табличку (снимает там признак и меняет дату последнего изменения).

5. Пользователь снова входит, снова выполняется п. 2. Только на этот раз в этих данных нет признака того, что пароль должен быть сменен.

6. В локальной БД проверка проходит без ошибок и пользователь успешно входит в БД.