oracle会话inactive_数据库审计和日志审计的区别

(2) 2024-09-14 09:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
oracle会话inactive_数据库审计和日志审计的区别,希望能够帮助你!!!。

概述

今天主要介绍一下关于Oracle安全的核心4大触发器,主要是做审计用,仅供参考。


1、会话登陆事件审计触发器(数据库级别)

CREATE OR REPLACE TRIGGER Login_Audit_Trigger AFTER LOGON ON DATABASE /* ||名称:会话登陆事件审计触发器 ||说明: */ DECLARE Session_Id_Var NUMBER; /* 会话ID */ Os_User_Var VARCHAR2(200); /* 终端OS用户 */ IP_Address_Var VARCHAR2(200); /* 终端IP */ Terminal_Var VARCHAR2(200); /* 终端 */ Host_Var VARCHAR2(200); /* 终端主机名 */ BEGIN /* 获取登陆用户信息 */ SELECT SYS_CONTEXT('USERENV', 'SESSIONID'), SYS_CONTEXT('USERENV', 'OS_USER'), SYS_CONTEXT('USERENV', 'IP_ADDRESS'), SYS_CONTEXT('USERENV', 'TERMINAL'), SYS_CONTEXT('USERENV', 'HOST') INTO Session_Id_Var, Os_User_Var, IP_Address_Var, Terminal_Var, Host_Var FROM DUAL; /* 记录登陆审计信息 */ INSERT INTO Audit_Login_DB (Session_Id, /* 会话ID */ OS_User, /* 终端OS用户 */ IP_Address, /* 终端IP地址 */ Terminal, /* 终端 */ Host, /* 终端主机名 */ User_Name, /* ORACLE 用户名*/ LogOn_Date, /* 登陆时间 */ LogOff_Date, /* 登离时间 */ Elapsed_Minutes /* 在线时间 */) VALUES (Session_Id_Var, Os_User_Var, IP_Address_Var, Terminal_Var, Host_Var, USER, SYSDATE, NULL, NULL); COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END Login_Audit_Trigger;


2、会话登离事件审计触发器(数据库级别)

CREATE OR REPLACE TRIGGER LogOff_Audit_Trigger BEFORE LOGOFF ON DATABASE /* ||名称:会话登离事件审计触发器 ||说明: */ DECLARE Session_Id_Var NUMBER; /* 会话ID */ BEGIN /* 获取登陆用户信息 */ SELECT SYS_CONTEXT('USERENV', 'SESSIONID') INTO Session_Id_Var FROM DUAL; /* 更新会话审计记录信息 */ UPDATE Audit_Login_DB SET LogOff_Date = SYSDATE, Elapsed_Minutes = ROUND((SYSDATE - LogOn_Date) * 1440) WHERE Session_Id = Session_Id_Var; --WHERE SYS_CONTEXT('USERENV','SESSIONID') = Session_Id; COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END LogOff_Audit_Trigger; 
oracle会话inactive_数据库审计和日志审计的区别_https://bianchenghao6.com/blog__第1张


3、DDL事件审计触发器(数据库级别)

CREATE OR REPLACE TRIGGER DDL_Audit_Trigger AFTER DDL ON DATABASE /* ||名称:DDL事件审计触发器 ||说明: */ DECLARE Session_Id_Var NUMBER; /* 会话ID */ Os_User_Var VARCHAR2(200); /* 终端OS用户 */ IP_Address_Var VARCHAR2(200); /* 终端IP */ Terminal_Var VARCHAR2(200); /* 终端 */ Host_Var VARCHAR2(200); /* 终端主机名 */ Cut NUMBER; /* SQL列表长度 */ Sql_Text ORA_NAME_LIST_T; /* SQL_TEXT 列表 */ L_Trace NUMBER; /* 循环执行条件 */ DDL_Sql_Var VARCHAR2(2000); /* DDL语句 */ BEGIN /* 获取操作用户信息 */ SELECT SYS_CONTEXT('USERENV', 'SESSIONID'), SYS_CONTEXT('USERENV', 'OS_USER'), SYS_CONTEXT('USERENV', 'IP_ADDRESS'), SYS_CONTEXT('USERENV', 'TERMINAL'), SYS_CONTEXT('USERENV', 'HOST') INTO Session_Id_Var, Os_User_Var, IP_Address_Var, Terminal_Var, Host_Var FROM DUAL; /* 获取DDL SQL语句 */ BEGIN SELECT COUNT(*) INTO L_Trace FROM DUAL WHERE ORA_DICT_OBJ_NAME NOT LIKE 'MLOG%' AND ORA_DICT_OBJ_NAME NOT LIKE '%LOG' AND UTL_INADDR.GET_HOST_ADDRESS IS NOT NULL AND SYS_CONTEXT('USERENV', 'IP_ADDRESS') IS NOT NULL AND SYS_CONTEXT('USERENV', 'IP_ADDRESS') <> UTL_INADDR.GET_HOST_ADDRESS; IF L_Trace > 0 THEN Cut := ORA_SQL_TXT(Sql_Text); FOR i IN 1 .. Cut LOOP DDL_Sql_Var := SUBSTR(DDL_Sql_Var || Sql_Text(i), 1, 2000); END LOOP; END IF; EXCEPTION WHEN OTHERS THEN NULL; END; /* 记录登陆审计信息 */ INSERT INTO Audit_DDL_OBJ (Opr_Time, /* 操作时间 */ Session_Id, /* 会话ID */ OS_User, /* 终端OS用户 */ IP_Address, /* 终端IP地址 */ Terminal, /* 终端 */ Host, /* 终端主机名 */ User_Name, /* ORACLE 用户名*/ DDL_Type, /* DDL操作类型 */ DDL_Sql, /* DDL语句 */ Object_Type, /* 操作对象类型 */ Owner, /* 对象拥有者 */ Object_Name /* 对象名称 */) VALUES (SYSDATE, Session_Id_Var, Os_User_Var, IP_Address_Var, Terminal_Var, Host_Var, ORA_LOGIN_USER, ORA_SYSEVENT, DDL_Sql_Var, ORA_DICT_OBJ_TYPE, ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_NAME); COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END DDL_Audit_Trigger; 
oracle会话inactive_数据库审计和日志审计的区别_https://bianchenghao6.com/blog__第2张


4、核心表删除事件审计触发器(表级别)

CREATE OR REPLACE TRIGGER delete_log_trigger AFTER DELETE ON rfuser.io_log_detail /* ||名称:核心表删除事件审计触发器 ||说明: */ FOR EACH ROW BEGIN INSERT INTO record_log SELECT :old.ERR_DESC, USER, SYSDATE, sys_context('userenv', 'ip_address'), q.sql_text, :OLD.START_TIME FROM v$sql q, v$session s WHERE s.audsid = (SELECT userenv('SESSIONID') FROM dual) AND s.sql_id = q.sql_id; END delete_log_trigger;
oracle会话inactive_数据库审计和日志审计的区别_https://bianchenghao6.com/blog__第3张


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

oracle会话inactive_数据库审计和日志审计的区别_https://bianchenghao6.com/blog__第4张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复