postgresql trigger ile password degisikligi loglamak
Published
postgresql'de insert/update/delete islemleri sonrasina hook olusturmak mumkun. bu hooklar ile de bir suru degisik senaryoyu db'ye yaptirabiliriz.
ornegin userlarin yaptigi sifre degisikliklerini baska bir tabloda tutmak istiyoruz, bu akis tamamiyle db tarafinda halledilebilir (iyidir kotudur orasi size kalmis tabii).
log_user_password_changes adinda bir fonksiyon olusturup, user tablosunda update yaptildiginda bu fonksiyonu trigger ettirelim.
CREATE OR REPLACE FUNCTION log_user_password_changes()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$
BEGIN
IF NEW.password <> OLD.password THEN
--- eski sifreyi db'ye yazalim
INSERT INTO user_password_changes(user_id, password, changed_on)
VALUES(OLD.id, OLD.password, now());
--- ayni user icin 90 gunden eski degisiklikleri de silelim
DELETE from user_password_changes WHERE user_id = OLD.id and changed_on <= current_timestamp - ('90 days')::interval;
END IF;
RETURN NEW;
END;
$$
CREATE TRIGGER user_password_change
AFTER UPDATE ON users
FOR EACH ROW
EXECUTE PROCEDURE log_user_password_changes();
demo:
47 views