2017-01-27 7 views
1

私は過去3か月間に仕事をしていないユーザをロックする必要があります。 私は非常に初心者です! 私はドキュメントを見て、私は設定でこれを行うことができるとは思わない。 (それは本当ですか?) 毎日の手順(pgagentを使って)を開発し、クエリを作成してユーザーをロックする必要がありますが、この情報を持つシステムテーブルを見つけることはできません。 私を助けることができますか? ありがとうございました Gianpostgresqlアクティビティのないユーザをロックする

答えて

1

これは間違いありません。最後のログイン時刻はデータベースに記録されず、ログファイル(ログが適切に構成されている場合)にのみ記録されます。

私はあなたがPostgreSQLを使用するアプリケーションの助けなしにこれを実装することはできないと思います。 2つの可能性が考えられます。

  • アプリケーションで最後のログイン時刻が記録されるテーブルを作成します。あなたの定期的な仕事は、そのテーブルを使ってユーザーをロックするかどうかを決めます。 。

  • は、このような関数を作成します。アプリケーションは、その後すぐに、ユーザーがログインした後に関数を呼び出し、次のログインがより3ヶ月後である場合

    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があり、それはこの非常に簡単になるだろう“ログイン・トリガーのようなものはありません。

+0

ありがとうLaurenzしかし、私はアプリケーションに関係なくデータベースのセキュリティのためにこれを行う必要があります... おそらく私はPAMのようなものでユーザーを認証することができます(...しかし、私はそれが勝利のマシンであるとは知らない)..乾杯Gian –

+0

あなたは正しいです。その場合、データベース外の解決策が優先されます。 –

+0

mmm ... PAM私は勝利で利用可能ではないと思います...誰かがそのようなルールで設定できるウィンドウで認証システムの経験を持っていますか? –

関連する問題