【问题标题】:postgresql lock user without activitypostgresql 锁定用户没有活动
【发布时间】:2017-01-27 17:17:55
【问题描述】:

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

【问题讨论】:

    标签: sql 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 中没有“登录触发器”之类的东西,这会使这变得简单得多。

    【讨论】:

    • 感谢 Laurenz,但无论应用程序如何,为了数据库的安全性,我都应该这样做......也许我可以使用 PAM 之类的东西对用户进行身份验证(......但我不知道这是一台胜利机器).. 干杯吉安
    • 你是对的;在这种情况下,最好使用数据库之外的解决方案。
    • mmm...PAM 我认为在 win 上不可用... 有没有人有 Windows 上可以配置类似规则的身份验证系统的经验??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2021-07-02
    • 2011-06-03
    • 2023-03-03
    • 2011-01-02
    相关资源
    最近更新 更多