2012-03-05 4 views
2

테이블에 수행 된 모든 변경 사항을 기록하는 PL/SQL 감사 트리거가 있습니다.레코드를 삭제 한 사용자 찾기

레코드를 삽입/삭제 한 user_id를 찾을 수 있습니다. (user_id는 현재 웹 애플리케이션에 대한 액세스 권한이없는 코드입니다.) 그래서

,

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 사용할 수 없습니다, 새로운 기록에 액세스 할 수 없습니다 때문에 나는 어느 새를 사용할 수 없습니다, 삭제합니다.

이전에 사용한 DELETE에 대해 생각했지만 여전히이 레코드를 삭제 한 사람이 아닌 이전 사용자 ID 만 얻을 수 있습니다.

누가 레코드를 삭제했는지에 대한 감사를 유지할 수 있도록 변경하려는 경우 어떻게해야합니까? 거기에 코드를 통해 이것을 전달할 수 있습니까?

+2

+1 큰 질문 - 최근에 같은 문제가있었습니다. 이 문제가 발생한 모든 테이블에서 DELETE 권한을 취소하여 문제를 해결했습니다. 즉, "삭제"기능을 추가하여 테이블에 "삭제 된"플래그를 추가하여 사용자의 "삭제"액션을 플래그의 간단한 업데이트로 바꿉니다. –

답변

1

은 아마 당신은에서와 같이 UID 기능을 사용할 수

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; 

당신은 사용자 이름 대신 대신 UID의 USER 기능을 사용할 수있는 ID 번호를합니다.

공유하고 즐기십시오.

+0

네, 그게 내가 가진 유일한 옵션이라고 생각합니다. OS 사용자 이름을 얻으려고하고있어 누가 변경 작업을 수행하고 있는지 더 잘 보여줍니다. – roymustang86

관련 문제