2012-03-05 42 views
2

我有一個PL/SQL審計觸發器,它記錄對錶執行的所有更改。找到刪除記錄的用戶

我能找到插入/刪除記錄的user_id。 (user_id來自Web應用程序,我目前無法訪問該代碼)。

所以,

TRIGGER AUD_CONFIG_TRG 
AFTER INSERT OR UPDATE OR DELETE ON CONFIG 
IF INSERTING OR UPDATING THEN 
v_user_value_txt := :NEW.AUDIT_UPDATED_USER_ID; 

然而,對於刪除,我不能簡單地用OLD.AUDIT_UPDATED_USER_ID,我不能使用新的,因爲相關的新紀錄將無法訪問。

我想過使用BEFORE DELETE,但我仍然只能得到一個較舊的用戶標識,而不是刪除此記錄的用戶。

如果我想更改綁定器,以便它可以維護對誰刪除記錄的審計,我該如何處理?有什麼我可以通過代碼傳遞?如果你想要的用戶名,而不是您可以使用用戶的功能,而不是UID的ID號

CREATE TRIGGER AUD_CONFIG_TRG 
    AFTER INSERT OR UPDATE OR DELETE ON CONFIG 
    REFERENCING NEW AS NEW 
       OLD AS OLD 
    FOR EACH ROW 
    DECLARE 
    V_USER_VALUE_TXT VARCHAR2(32); 
    BEGIN 
    IF INSERTING OR UPDATING THEN 
     V_USER_VALUE_TXT := :NEW.AUDIT_UPDATED_USER_ID; 
    END IF; 

    IF DELETING THEN 
     V_USER_VALUE_TXT := UID; 
    END IF; 
    END AUD_CONFIG_TRG; 

+2

+1個大問題 - 我們最近有同樣的問題。我們通過從所有表中取消DELETE特權來解決這個問題。並添加「軟刪除」功能 - 即向表中添加「刪除」標誌,將用戶的「刪除」操作轉換爲標誌的簡單更新。 – 2012-03-06 04:16:42

回答

1

也許你可以使用的UID功能,象這樣

分享和享受。

+0

是的,我想這是我唯一的選擇。我正在嘗試獲取操作系統用戶名,以便更好地指示誰正在進行更改。 – roymustang86 2012-03-05 21:43:46