Перейти к основному содержимому

Задание 2: Создаем парольные политики

Упражнение 1: Создание политики для пользователя​

План​

  1. Зададим параметры политики:

    • длинна пароля не менее 8 символов (min_length);
    • в пароле должно быть не менее 2 цифр (alpha_numeric);
    • в пароле должно быть не менее 1 спец.символа (min_special_chars);
    • в пароле должно быть не менее 1 заглавной буквы (min_uppercase).
  2. Активируем политику для пользователя.

  3. Установим пароль для пользователя удовлетворяющий активной парольной политике для него.

Внимание!

Управление парольными политиками происходит через использование функций, выполнять любые действия с которыми может политику может суперпользователь или тот, кому предоставляется привиллегия EXECUTE на них.

Практика​

  1. Задайте параметры парольной политики в соответствии с заданием:

    postgres@postgres=# SELECT * FROM set_role_policies('test_user', check_syntax(1::boolean), min_length(8), alpha_numeric(2), min_special_chars(1), min_uppercase(1))\gx
    ┌─[ RECORD 1 ]──────────────────────┬───────────┐
    │ roleid │ test_user │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 8 │
    │ illegal_values │ │
    │ alpha_numeric │ 2 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 1 │
    │ min_uppercase │ 1 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴───────────┘
  2. Активируйте политику:

    postgres@postgres=# SELECT * FROM enable_policy('test_user')\gx
    ┌─[ RECORD 1 ]──────────────────────┬───────────┐
    │ roleid │ test_user │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 8 │
    │ illegal_values │ │
    │ alpha_numeric │ 2 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 1 │
    │ min_uppercase │ 1 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ t │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴───────────┘
  3. Убедитесь, что параметры применились:

    postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');
    ┌───────────────────────────────────┬──────────┬─────────────┬───────────┐
    │ policy_name │ value │ source_type │ source │
    ├───────────────────────────────────┼──────────┼─────────────┼───────────┤
    │ reuse_time │ 00:00:00 │ config │ │
    │ in_history │ 0 │ config │ │
    │ max_age │ 120 days │ config │ │
    │ min_age │ 00:00:00 │ config │ │
    │ grace_login_limit │ 5 │ config │ │
    │ grace_login_time_limit │ 00:00:00 │ config │ │
    │ expire_warning │ 7 days │ config │ │
    │ lockout │ true │ config │ │
    │ lockout_duration │ 24:00:00 │ config │ │
    │ max_failure │ 10 │ config │ │
    │ failure_count_interval │ 00:00:00 │ config │ │
    │ check_syntax │ true │ role │ test_user │
    │ min_length │ 8 │ role │ test_user │
    │ illegal_values │ false │ config │ │
    │ alpha_numeric │ 2 │ role │ test_user │
    │ min_alpha_chars │ 0 │ config │ │
    │ min_special_chars │ 1 │ role │ test_user │
    │ min_uppercase │ 1 │ role │ test_user │
    │ min_lowercase │ 0 │ config │ │
    │ max_rpt_chars │ 0 │ config │ │
    │ track_login │ false │ config │ │
    │ max_inactivity │ │ │ │
    │ use_password_strength_estimator │ false │ config │ │
    │ password_strength_estimator_score │ │ │ │
    │ custom_function │ 0 │ config │ │
    │ transport_password_life_time │ 00:00:00 │ config │ │
    │ grace_authid_period │ 00:00:00 │ config │ │
    └───────────────────────────────────┴──────────┴─────────────┴───────────┘
    (27 rows)
Не проходите мимо!

Одновременно создать и применить парольную политику можно одной командой, указав параметр policy_enable(1::boolean); В нашем случае команда для создания парольной политики будет выглядеть так:

postgres@postgres=# SELECT * FROM set_role_policies('test_user', check_syntax(1::boolean), min_length(8), alpha_numeric(2), min_special_chars(1), min_uppercase(1), policy_enable(1::boolean) )\gx

Упражнение 2: Создание парольной политики для групповой роли​

Внимание!

При наследовании нескольких парольных политик применяется более строгая. Например, если политика 1 разрешает длину пароля более 5 символов, а политика 2 позволяет задавать пароль минимум с 10 символами, то по итогу в контексте данного критерия отдельного будет установлено требование – минимум 10 символов.

План​

Создадим отдельные парольные политики для групповых ролей group_role1 и group_role2, для этого:

  1. Создадим групповые роли group_role1 и group_role2.

  2. Создадим и активируем политику для роли group_role1 с параметрами:

    • время жизни пароля 60 дней (max_age);
    • длинна пароля не менее 12 символов (min_length);
    • в пароле должно быть не менее 3 цифр (alpha_numeric);
    • в пароле должно быть не менее 2 спецсимволов (min_special_chars);
    • в пароле должно быть не менее 2 заглавной буквы (min_uppercase);
    • создать и активировать одной командой (policy_enable(1::boolean).
  3. Создадим и активируем политику для роли group_role2 с параметрами:

    • время жизни пароля 90 дней (max_age);
    • длинна пароля не менее 12 символов (min_length);
    • в пароле должно быть не менее 3 цифр (alpha_numeric);
    • в пароле должно быть не менее 2 спецсимволов (min_special_chars);
    • в пароле должно быть не менее 2 заглавной буквы (min_uppercase);
    • создать и активировать одной командой (policy_enable(1::boolean).
  4. Включим роль test_user в групповые роли group_test1 и group_test2.

Практика​

  1. Проверьте, какие параметры парольной политики установлены на текущий момент для пользователя test_user:

    postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');
    ┌───────────────────────────────────┬──────────┬─────────────┬───────────┐
    │ policy_name │ value │ source_type │ source │
    ├───────────────────────────────────┼──────────┼─────────────┼───────────┤
    │ reuse_time │ 00:00:00 │ config │ │
    │ in_history │ 0 │ config │ │
    │ max_age │ 120 days │ config │ │
    │ min_age │ 00:00:00 │ config │ │
    │ grace_login_limit │ 5 │ config │ │
    │ grace_login_time_limit │ 00:00:00 │ config │ │
    │ expire_warning │ 7 days │ config │ │
    │ lockout │ true │ config │ │
    │ lockout_duration │ 24:00:00 │ config │ │
    │ max_failure │ 10 │ config │ │
    │ failure_count_interval │ 00:00:00 │ config │ │
    │ check_syntax │ true │ role │ test_user │
    │ min_length │ 8 │ role │ test_user │
    │ illegal_values │ false │ config │ │
    │ alpha_numeric │ 2 │ role │ test_user │
    │ min_alpha_chars │ 0 │ config │ │
    │ min_special_chars │ 1 │ role │ test_user │
    │ min_uppercase │ 1 │ role │ test_user │
    │ min_lowercase │ 0 │ config │ │
    │ max_rpt_chars │ 0 │ config │ │
    │ track_login │ false │ config │ │
    │ max_inactivity │ │ │ │
    │ use_password_strength_estimator │ false │ config │ │
    │ password_strength_estimator_score │ │ │ │
    │ custom_function │ 0 │ config │ │
    │ transport_password_life_time │ 00:00:00 │ config │ │
    │ grace_authid_period │ 00:00:00 │ config │ │
    └───────────────────────────────────┴──────────┴─────────────┴───────────┘

    (27 rows)
  2. Деактивируйте политику:

    postgres@postgres=# SELECT * FROM disable_policy('test_user')\gx
    ┌─[ RECORD 1 ]──────────────────────┬───────────┐
    │ roleid │ test_user │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 8 │
    │ illegal_values │ │
    │ alpha_numeric │ 2 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 1 │
    │ min_uppercase │ 1 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ f │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴───────────┘
  3. Запросите детализированную информацию о настройках парольной политики для пользователя test_user:

    postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');
    ┌───────────────────────────────────┬──────────┬─────────────┬────────┐
    │ policy_name │ value │ source_type │ source │
    ├───────────────────────────────────┼──────────┼─────────────┼────────┤
    │ reuse_time │ 00:00:00 │ config │ │
    │ in_history │ 0 │ config │ │
    │ max_age │ 120 days │ config │ │
    │ min_age │ 00:00:00 │ config │ │
    │ grace_login_limit │ 5 │ config │ │
    │ grace_login_time_limit │ 00:00:00 │ config │ │
    │ expire_warning │ 7 days │ config │ │
    │ lockout │ true │ config │ │
    │ lockout_duration │ 24:00:00 │ config │ │
    │ max_failure │ 10 │ config │ │
    │ failure_count_interval │ 00:00:00 │ config │ │
    │ check_syntax │ true │ config │ │
    │ min_length │ 5 │ config │ │
    │ illegal_values │ false │ config │ │
    │ alpha_numeric │ 1 │ config │ │
    │ min_alpha_chars │ 0 │ config │ │
    │ min_special_chars │ 0 │ config │ │
    │ min_uppercase │ 0 │ config │ │
    │ min_lowercase │ 0 │ config │ │
    │ max_rpt_chars │ 0 │ config │ │
    │ track_login │ false │ config │ │
    │ max_inactivity │ │ │ │
    │ use_password_strength_estimator │ false │ config │ │
    │ password_strength_estimator_score │ │ │ │
    │ custom_function │ 0 │ config │ │
    │ transport_password_life_time │ 00:00:00 │ config │ │
    │ grace_authid_period │ 00:00:00 │ config │ │
    └───────────────────────────────────┴──────────┴─────────────┴────────┘
    (27 rows)
  4. Создадим групповую роль group_role1 и активируйте для нее парольную политику с параметрами:

    • время жизни пароля 60 дней (max_age);
    • длинна пароля не менее 12 символов (min_length);
    • в пароле должно быть не менее 3 цифр (alpha_numeric);
    • в пароле должно быть не менее 2 спецсимволов (min_special_chars);
    • в пароле должно быть не менее 2 заглавных букв (min_uppercase);
    • создать и активировать одной командой (`policy_enable(1::boolean)).
    postgres@postgres=# CREATE ROLE group_role1;
    CREATE ROLE
    postgres@postgres=# SELECT * FROM set_role_policies('group_role1', max_age('60 days'), check_syntax(1::boolean), min_length(15), alpha_numeric(3), min_special_chars(2), min_uppercase(2), policy_enable(1::boolean))\gx
    ┌─[ RECORD 1 ]──────────────────────┬─────────────┐
    │ roleid │ group_role1 │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ 60 days │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 15 │
    │ illegal_values │ │
    │ alpha_numeric │ 3 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 2 │
    │ min_uppercase │ 2 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ t │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴─────────────┘
  5. Создадим групповую роль group_role2 и активируйте для нее парольную политику с параметрами:

    • время жизни пароля 90 дней (max_age);
    • длинна пароля не менее 12 символов (min_length);
    • в пароле должно быть не менее 3 цифр (alpha_numeric);
    • в пароле должно быть не менее 2 спецсимволов (min_special_chars);
    • в пароле должно быть не менее 2 заглавной буквы (min_uppercase);
    • создать и активировать одной командой (policy_enable(1::boolean)).
    postgres@postgres=# CREATE ROLE group_role2;
    CREATE ROLE
    postgres@postgres=# SELECT * FROM set_role_policies('group_role2', max_age('90 days'), check_syntax(1::boolean), min_length(20), alpha_numeric(1), min_special_chars(1), min_uppercase(2), policy_enable(1::boolean))\gx
    ┌─[ RECORD 1 ]──────────────────────┬─────────────┐
    │ roleid │ group_role2 │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ 90 days │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 20 │
    │ illegal_values │ │
    │ alpha_numeric │ 1 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 1 │
    │ min_uppercase │ 2 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ t │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴─────────────┘
  6. Включите роль test_user в групповые роли group_test1 и group_test2:

    postgres@postgres=# GRANT group_role1 TO test_user;
    GRANT ROLE
    postgres@postgres=# GRANT group_role2 TO test_user;
    GRANT ROLE
    postgres@postgres=# \dg test_user
    List of roles
    ┌───────────┬────────────┬───────────────────────────┐
    │ Role name │ Attributes │ Member of │
    ├───────────┼────────────┼───────────────────────────┤
    │ test_user │ │ {group_role1,group_role2} │
    └───────────┴────────────┴───────────────────────────┘
Проверь себя! С учетом пунктов 4 и 5 подумайте, какие значения параметров min_length и max_age будут применяться к test_user?

При выборе парольной политики сравниваются не нулевые значения и берется более строгое значение:

  • значение параметра длины пароля min_length=20 взято из парольной политики групповой роли group_role2;
  • значение параметра времени жизни пароля max_age='60 days' взято из парольной политики групповой роли group_role1.
  1. Активируйте ранее созданную политику для роли test_user:

    postgres@postgres=# SELECT * FROM enable_policy('test_user')\gx
    ┌─[ RECORD 1 ]──────────────────────┬───────────┐
    │ roleid │ test_user │
    │ reuse_time │ │
    │ in_history │ │
    │ max_age │ │
    │ min_age │ │
    │ grace_login_limit │ │
    │ grace_login_time_limit │ │
    │ expire_warning │ │
    │ lockout │ │
    │ lockout_duration │ │
    │ max_failure │ │
    │ failure_count_interval │ │
    │ check_syntax │ t │
    │ min_length │ 8 │
    │ illegal_values │ │
    │ alpha_numeric │ 2 │
    │ min_alpha_chars │ │
    │ min_special_chars │ 1 │
    │ min_uppercase │ 1 │
    │ min_lowercase │ │
    │ max_rpt_chars │ │
    │ policy_enable │ t │
    │ track_login │ │
    │ max_inactivity │ │
    │ use_password_strength_estimator │ │
    │ password_strength_estimator_score │ │
    │ custom_function │ │
    │ transport_password_life_time │ │
    │ grace_authid_period │ │
    └───────────────────────────────────┴───────────┘
  2. При получении критериев итоговой парольной политики для test_user, видим, что значения параметров эксклюзивной парольной политики обладают большим приоритетом, чем значения в рамках групповых ролей:

    postgres@postgres=# SELECT * FROM recognize_password_policy_detailed('test_user');
    ┌───────────────────────────────────┬──────────┬─────────────┬─────────────┐
    │ policy_name │ value │ source_type │ source │
    ├───────────────────────────────────┼──────────┼─────────────┼─────────────┤
    │ reuse_time │ 00:00:00 │ config │ │
    │ in_history │ 0 │ config │ │
    │ max_age │ 60 days │ role │ group_role1 │
    │ min_age │ 00:00:00 │ config │ │
    │ grace_login_limit │ 5 │ config │ │
    │ grace_login_time_limit │ 00:00:00 │ config │ │
    │ expire_warning │ 7 days │ config │ │
    │ lockout │ true │ config │ │
    │ lockout_duration │ 24:00:00 │ config │ │
    │ max_failure │ 10 │ config │ │
    │ failure_count_interval │ 00:00:00 │ config │ │
    │ check_syntax │ true │ role │ test_user │
    │ min_length │ 8 │ role │ test_user │
    │ illegal_values │ false │ config │ │
    │ alpha_numeric │ 2 │ role │ test_user │
    │ min_alpha_chars │ 0 │ config │ │
    │ min_special_chars │ 1 │ role │ test_user │
    │ min_uppercase │ 1 │ role │ test_user │
    │ min_lowercase │ 0 │ config │ │
    │ max_rpt_chars │ 0 │ config │ │
    │ track_login │ false │ config │ │
    │ max_inactivity │ │ | │
    │ use_password_strength_estimator │ false │ config │ │
    │ password_strength_estimator_score │ │ │ │
    │ custom_function │ 0 │ config │ │
    │ transport_password_life_time │ 00:00:00 │ config │ │
    │ grace_authid_period │ 00:00:00 │ config │ │
    └───────────────────────────────────┴──────────┴─────────────┴─────────────┘
    (27 rows)

Подведем итоги​

Вопрос 1

Выберете все верные утверждения: