wiki:failedAttemptsLog

Лог на корисници при 3 неуспешни обиди

Опис

Овој тригер ќе се тригерува откако ќе се случат 3 последователни failed login attempts. За да го реализираме ова, т.е. да водиме евиденција дека се случиле 3 последователни обиди, на бројот за failed login attempts ќе му направиме модул со 3.

Тригер

SQL код

CREATE TRIGGER trg_failed_login_threshold
AFTER INSERT ON Login_Attempt
FOR EACH ROW
EXECUTE FUNCTION trg_failed_login_threshold();

Функција

SQL код

CREATE OR REPLACE FUNCTION trg_failed_login_threshold()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
DECLARE
    failed_count INTEGER; --declarirame promenliva so tip int za broenje na 3 neuspesni obidi
BEGIN
    IF NEW.successful = FALSE THEN --dokolku loginot e neuspesen
        SELECT COUNT(*) 
        INTO failed_count --zapisi vo failed_count promenlivata
        FROM Login_Attempt la --od Login_Attempt tabelata
        WHERE la.user_id = NEW.user_id  -- kade sto e ist user id
          AND la.successful = FALSE --neuspesen obid
          AND la.attempt_date >= COALESCE(
              (
                  SELECT MAX(successful_login.attempt_date)
                  FROM Login_Attempt successful_login
                  WHERE successful_login.user_id = NEW.user_id
                    AND successful_login.successful = TRUE
                    AND successful_login.attempt_date < NEW.attempt_date
              ),
              '-infinity'::timestamptz
          );

        IF failed_count > 0 AND MOD(failed_count, 3) = 0 THEN --failed count mora da bide > 0 i failed count modul 3 mora da bide 0

            INSERT INTO System_Event (
                user_id,
                user_email,
                event_type,
                description
            )
            VALUES (
                NEW.user_id,
                NEW.email,
                'THREE_UNSUCCESSFUL_LOGINS',
                'The user failed to login 3 times in a row'
            );
        END IF;
    END IF;
    RETURN NEW;
END;
$$;

View

SQL код

CREATE OR REPLACE VIEW Failed_Login_View AS
SELECT
    user_id,
    user_email AS email,
    event_type,
    description,
    event_date
FROM System_Event
WHERE event_type = 'THREE_UNSUCCESSFUL_LOGINS';
Last modified 2 days ago Last modified on 08/18/26 14:27:48
Note: See TracWiki for help on using the wiki.