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 не существует такой вещи, как "триггер входа в систему", которая сделала бы это намного проще.