有没有办法找出在Oracle的某个表上执行DML操作的IP地址?
如果无法进行ip,那么如何找到SID?
感谢。
答案 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;
但请注意,如果某人有不良意图,可以很容易地绕过或伪造这种记录。更安全的方法是启用审计跟踪。