查找删除记录的用户

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。

分享和享受。

【讨论】:

是的,我想这是我唯一的选择。我正在尝试获取操作系统用户名,以便更好地指示谁在进行更改。

以上是关于查找删除记录的用户的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 如何查找并删除重复数据

PostgreSQL 如何查找并删除重复数据

PostgreSQL 如何查找并删除重复数据

oracle 查找删除重复数据

如何通过 CloudKit Dashboard 查找用户记录

Oracle中用Rowid查找和删除重复记录!