1

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

4

1 回答 1

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,这会使这变得更简单。

于 2017-01-27T09:17:55.790 回答