HANA — Процедура активации/ деактивации определенного пользователя базы данных

#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 паролей. Затем установите тот, который вы хотите. Я обновил ответ.