oracle 触发器_详解Oracle审计4大触发器--会话登录、登出、DDL事件、表修改事件...

概述

今天主要介绍一下关于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;
3e84af9019c16bcbc961fd4bab205639.png

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;
1ba659b14879f365aafd0dde639cef3b.png

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

CREATE OR REPLACE TRIGGER delete_log_trigger AFTER DELETE ON rfuser.io_log_detail/*||名称:核心表删除事件审计触发器||说明:*/ FOR EACH ROWBEGIN 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;
482357c4190806f32c11382bb5314234.png

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

209ca7695dcabab0b6e38ff9e6405ae2.gif
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值