没有活动的postgresql锁定用户

时间:2017-01-27 08:34:31

标签: sql postgresql pgagent

我必须锁定过去三个月内不工作的用户。 我是新手!  我查看了文档,我认为我可以通过配置来完成。 (这是真的吗?) 所以我必须开发一个日常程序(使用pgagent?),进行查询然后锁定用户,但我找不到具有此信息的系统表。 你可以帮帮我吗? 非常感谢 吉安

1 个答案:

答案 0 :(得分: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没有“登录触发器”这样的东西,这会使这更简单。