查找删除记录的用户
Posted
技术标签:
【中文标题】查找删除记录的用户【英文标题】:finding the user who deleted the record 【发布时间】:2012-03-05 16:11:59 【问题描述】:我有一个 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,而不是删除此记录的那个。
如果我想更改装配工以便它可以对谁删除了记录进行审计,我该怎么做?有什么办法可以通过代码传递吗?
【问题讨论】:
+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;
如果你想要用户名而不是 ID 号,你可以使用 USER 函数而不是 UID。
分享和享受。
【讨论】:
是的,我想这是我唯一的选择。我正在尝试获取操作系统用户名,以便更好地指示谁在进行更改。以上是关于查找删除记录的用户的主要内容,如果未能解决你的问题,请参考以下文章