Postgresql заблокировать пользователя без активности

Я должен заблокировать пользователей, которые не работают в предыдущие три месяца. Я очень новичок! Я посмотрел на документацию, и я не думаю, что я могу сделать это по конфигурации. (Это правда?) Поэтому мне нужно разработать ежедневную процедуру (с помощью pgagent?), Сделать запрос, а затем заблокировать пользователей, но я не могу найти системную таблицу, в которой есть эта информация. Не могли бы вы помочь мне? Большое спасибо Джиан

1 ответ

Решение

Это верно, время последнего входа в систему не записывается в базу данных, только в файл журнала (если запись настроена соответствующим образом).

Я думаю, что вы не сможете реализовать это без помощи приложения, которое использует PostgreSQL. Я могу думать о двух возможностях:

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

  • Создайте такую ​​функцию:

    CREATE OR REPLACE FUNCTION expire_me() RETURNS void
       LANGUAGE plpgsql SECURITY DEFINER
       SET search_path = 'pg_catalog' AS
    $$BEGIN
       EXECUTE 'ALTER ROLE ' || session_user || ' VALID UNTIL ''' ||
               (current_timestamp + INTERVAL '3 months') || '''';
    END;$$;
    

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

К сожалению, в PostgreSQL не существует такой вещи, как "триггер входа в систему", которая сделала бы это намного проще.

Другие вопросы по тегам