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

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)