如何找出在Oracle的某个表上执行DML操作的IP地址?

时间:2015-09-30 10:13:54

标签: oracle database-administration

有没有办法找出在Oracle的某个表上执行DML操作的IP地址?

如果无法进行ip,那么如何找到SID?

感谢。

2 个答案:

答案 0 :(得分:0)

但我不确定你需要什么。

如果您想知道什么是您的SID SELECT sys_context('USERENV', 'SID') FROM DUAL;

但是,如果您想知道谁在表上进行了DML操作,请检查Streams, replication of a DML

  

捕获过程或应用程序会创建一个或多个逻辑更改   记录(LCR)并将它们排入队列。 LCR是一条消息   使用描述数据库更改的特定格式。捕获   进程将从重做日志捕获的更改重新格式化为LCR,以及   应用程序可以构建LCR。如果更改是数据操作   语言(DML)操作,然后每个LCR封装行更改   从DML操作到源的共享表   数据库。如果更改是数据定义语言(DDL)   操作,然后LCR封装了对a进行的DDL更改   源数据库中的共享数据库对象。

答案 1 :(得分:0)

你可以像这样在你的桌子上创建一个触发器:

CREATE TABLE AUDIT_TABLE (USER_NAME VARCHAR2(30), IP_ADDRESS VARCHAR2(15), SID NUMBER);

CREATE OR REPLACE TRIGGER AUDIT_DML_CERTAIN_TABLE
    BEFORE INSERT OR DELETE OR UPDATE ON CERTAIN_TABLE
    FOR EACH ROW
BEGIN   
    INSERT INTO AUDIT_TABLE 
    VALUES (USER, SYS_CONTEXT('USERENV', 'IP_ADDRESS'), SYS_CONTEXT('USERENV', 'SESSIONID'));
END;

但请注意,如果某人有不良意图,可以很容易地绕过或伪造这种记录。更安全的方法是启用审计跟踪。