没有 activity 的 postgresql 锁定用户
postgresql lock user without activity
我要锁定前三个月没有工作的用户。
我是新手!
我看了文档,我不认为我可以通过配置来做到这一点。
(这是真的吗?)
所以我必须开发一个日常程序(使用 pgagent?),进行查询然后锁定用户,但我找不到具有此信息的系统 table。
你可以帮帮我吗?
非常感谢
吉安
没错,上次登录的时间没有记录在数据库中,只记录在日志文件中(如果日志配置适当的话)。
我认为如果没有使用 PostgreSQL 的应用程序的帮助,您将无法实现这一点。我可以想到两种可能性:
创建一个 table,您的应用程序会在其中记录上次登录时间。然后,您的定期作业可以使用 table 来决定是否应该锁定用户。
像这样创建一个函数:
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 没有“登录触发器”这样的东西,这会让事情变得简单得多。
我要锁定前三个月没有工作的用户。 我是新手! 我看了文档,我不认为我可以通过配置来做到这一点。 (这是真的吗?) 所以我必须开发一个日常程序(使用 pgagent?),进行查询然后锁定用户,但我找不到具有此信息的系统 table。 你可以帮帮我吗? 非常感谢 吉安
没错,上次登录的时间没有记录在数据库中,只记录在日志文件中(如果日志配置适当的话)。
我认为如果没有使用 PostgreSQL 的应用程序的帮助,您将无法实现这一点。我可以想到两种可能性:
创建一个 table,您的应用程序会在其中记录上次登录时间。然后,您的定期作业可以使用 table 来决定是否应该锁定用户。
像这样创建一个函数:
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 没有“登录触发器”这样的东西,这会让事情变得简单得多。