rotate_password. Генерация и установка постоянного пароля пользователя (включая ТУЗ)#

Генерация пароля осуществляется функцией rotate_password в соответствии с парольной политикой.

Функция генерации пароля rotate_password создает новый пароль для выбранного пользователя и:

  • возвращает его в качестве результата;

  • изменяет его в БД.

Входные параметры функции rotate_password:

  • (обязательный) Oid или имя пользователя;

  • (не обязательный) длина пароля. При отсутствии будет сгенерирован по минимальной длине пароля согласно парольным политикам (случайная длина до 5 символов).

Выходной параметр: сгенерированный пароль.

Пример запроса генерации пароля для пользователя User1:

SELECT * FROM rotate_password('User1');

Настройка#

Функция генерации пароля доступна при установленном расширении psql_rotate_password.

  1. Откройте конфигурационный файл postgersql.conf.

  2. Добавьте или измените следующие параметры:

    • rotate_password_enable = 'on' — включение функции генерации пароля;

    • rotate_password_num_rounds:'20' — количество попыток генерации пароля;

    • rotate_password.valid_roles = 'user1, user2, user3' — список пользователей (через запятую), для которых разрешена генерация пароля.

  3. При изменении параметров перечитайте конфигурацию (reload).

Диагностика ошибок#

При использовании функции могут возникать следующие ошибки:

  • Исчерпано количество попыток: превышено значение параметра rotate_password_num_rounds;

  • Пользователь не входит в список ролей: убедитесь, что пользователь указан в параметре rotate_password.valid_roles; Невозможно сгенерировать подходящий пароль: комбинация синтаксических требований и длины пароля не позволяет создать соответствующий требованиям пароль.

Сценарии использования#

  1. Установите значение („username“) параметра rotate_password.valid_roles в конфигурационном файле. Для применения изменений перечитайте конфигурацию (reload).

  2. Создайте политики для пользователя. В примере указаны значения для параметров по умолчанию, при необходимости можно их изменить.

    SELECT *
    FROM
    set_role_policies('username',
    policy_enable(1::boolean),
    check_syntax(1::boolean),
    min_length(16),
    illegal_values(0::boolean), 
    alpha_numeric(5),
    min_alpha_chars(1),
    min_special_chars(1),
    min_uppercase(1),
    min_lowercase(1),
    max_rpt_chars(2),
    use_password_strength_estimator(0::boolean),
    transport_password_life_time('3 days')) \gx
    

    Пример вывода:

    -[ RECORD 1 ]---------------------+-------
    roleid                            | username
    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                        | 16
    illegal_values                    | f
    alpha_numeric                     | 5
    min_alpha_chars                   | 1
    min_special_chars                 | 1
    min_uppercase                     | 1
    min_lowercase                     | 1
    max_rpt_chars                     | 2
    policy_enable                     | t
    track_login                       |
    max_inactivity                    |
    use_password_strength_estimator   | f
    password_strength_estimator_score |
    custom_function                   |
    transport_password_life_time      | 3 days
    
  3. Сгенерируйте пароль для пользователя:

    SELECT *
    FROM rotate_password('username');
    

    Пример вывода:

    rotate_password
    --------------------
    x3<2BTf"ma3P119`fs
    (1 row)