#sql #hana #hana-sql-script
#sql #hana #hana-sql-script
Вопрос:
Я пытаюсь разработать процедуру в HANA, которая активирует и деактивирует специального пользователя базы данных и регистрирует все в этом отношении.
Мне нравится, что у пользователя всегда один и тот же начальный пароль после активации, но он вынужден менять его при входе в систему.
У вас есть представление о том, как я могу это реализовать?
В настоящее время я терплю неудачу из-за политики паролей. Я не хочу касаться этой политики, и в ней говорится, что последние 5 паролей не разрешены для использования.
Есть ли способ пять раз предоставить пользователю любой пароль с помощью случайной функции и шестой раз пароль по умолчанию?
Приветствуются любые отзывы относительно реализации, улучшений и дальнейших идей.
Заранее спасибо.
Ответ №1:
Вы просили дать отзыв:
-
обходить политики безопасности, которые, предположительно, были установлены специально, не очень хорошая идея
-
самостоятельное ведение журнала также не кажется хорошей идеей. SAP HANA предоставляет аудит в качестве функции. Вместо написания кода ведения журнала рассмотрите возможность настройки соответствующей политики аудита
-
идея иметь пользователя с тем же паролем после активации, который затем необходимо изменить, довольно небезопасна. Это буквально то же самое, что оставить ключ от своего дома прямо за дверью вместе с инструкцией по замене замков после входа. Безопасность работает не так.
-
нет необходимости вручную
COMMIT
послеALTER USER
-
видя, что ваш код ожидает целый список пользователей, похоже, что одним из возможных сценариев использования для этого могут быть тестовые или обучающие пользователи. В этом случае рекомендуется вообще не беспокоиться о повторной активации пользователя.
Либо создайте вечные одноразовые учетные записи (например, TRAIN01-2020-01… ОБУЧЕНИЕ01-2020-01) или удаляйте и воссоздавайте пользователей всякий раз, когда новый набор пользователей должен использовать учетные записи. Это позволит избежать необходимости «танцевать вокруг» политики 5 последних паролей в целом. -
ПОЖАЛУЙСТА, выберите имена для процедур, которые проясняют, что должен делать код.
"START"
/"STOP"
не имеет никакого отношения к коду. -
Какова цель сохранения состояния деактивированных учетных записей в таблице? HANA отслеживает текущее состояние, вкл. отметка времени деактивации автоматически.
-
возвращаясь к идее «простого использования 5 случайных паролей» перед установкой пароля на общеизвестный: ничто в вашем коде не обрабатывает случай, когда случайный пароль был создан ранее. Также: обычно политики паролей также ограничивают частоту смены паролей в день — именно для того, чтобы избежать подобных стратегий.
Надеюсь, что это поможет, тем не менее.
Комментарии:
1. Спасибо за ваш подробный отзыв, Ларс. Я согласен с вами по всем пунктам и буду их улучшать. Вы случайно не знаете, как я передаю значения, которые я генерирую с помощью других процедур? Я спрашиваю, потому что я нашел генератор паролей ( intellify.de/blog/sap-hana / … ), которая работает довольно хорошо.
2. Указанная процедура возвращает пароль через результирующий набор по умолчанию. Это нельзя использовать в других процедурах, но вы можете легко превратить это в функцию или предоставить возвращаемый параметр.
Ответ №2:
Я думаю, что плохо давать какие-либо советы, когда кто-то пытается изобретать велосипед и обходные политики безопасности, потому что кому-то еще нужно будет поддерживать это чудовищное решение.
Но в любом случае, зачем вам какой-либо случайный пароль, если, наконец, вы установите желаемый? Просто переберите 6 предопределенных паролей и установите их один за другим. Для аудита вы можете создать политику аудита для этих пользователей и использовать стандартные поддерживаемые инструменты для отслеживания изменений.
РЕДАКТИРОВАТЬ: это код о «циклическом переборе 6 предопределенных паролей»:
do( in iv_base_pwd nvarchar(20) => 'qwe')
begin
declare lv_pwd_count int;
declare lv_i int := 0;
select value
into lv_pwd_count
from m_password_policy
where property = 'last_used_passwords';
while lv_i <= lv_pwd_count do
execute immediate 'alter user myuser password ''' || iv_base_pwd || '_' || lv_i | '''';
lv_i := lv_i 1;
end while;
execute immediate 'alter user myuser password ''' || iv_base_pwd || '''';;
end;
Комментарии:
1. Поскольку я действительно ограничен в программировании, это был мой первый подход. Я осведомлен о нарушениях безопасности и хорошо осведомлен о механизмах безопасности на стороне HANA. В руководстве по паролю говорится, что нельзя использовать не только последний PW, но и последние. В любом случае, я посмотрю, как оптимизировать предыдущий подход.
2. @Toni действительно. Но вам вообще не нужна какая-либо случайная последовательность, если, наконец, вы используете предопределенную pwd. Просто создайте набор размером last_used_passwords 1 и повторите цикл, чтобы пропустить последние N паролей. Затем установите тот, который вы хотите. Я обновил ответ.