2012-03-05 7 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を使用することを考えましたが、古いユーザー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

関連する問題