快速搭建记录核心业务表删除记录的日志审计信息

在数据安全重于一切的年度,如何进行数据保护就成为了计算机系统管理工作中的重中之重。很多大型企业,运行商和政府等单位中,可以通过采购各类安全设备(如数据库审计、日志审计、堡垒机等)进行数据监管和保护。但很多中小企业的业务系统中,没有足够预算,也没有计划去采购安全设备去进行数据监管和保护。这个时候,我们可以利用数据自身的功能,生成自己的日志审计记录,进而完成数据的监管和保护。下面我们通过oracle的触发器功能,记录下自己核心业务表的删除记录的日志审计信息。

1,创建生产表

创建模拟的生产表T_CODE:

sql 复制代码
-- Create table
create table T_CODE
(
  xh   NUMBER,
  name VARCHAR2(100),
  bj   CHAR(1),
  gxsj DATE default sysdate
)
tablespace DT_TPC_DAT
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

2,创建日志审计表

创建记录生产表的日志审计表T_CODE_AUDIT_LOG。我本地T_CODE_AUDIT_LOG记录了原表删除前的所有字段信息、哪个用户删除的、删除操作的ip地址、删除备注(大家可以根据自己需要添加和修改信息)。

sql 复制代码
create table T_CODE_AUDIT_LOG
(
  xh   NUMBER,
  name VARCHAR2(100),
  bj   CHAR(1),
  gxsj DATE,
  oper_type varchar2(10),
  oper_date date,
  oper_username varchar2(100),
  oper_ip varchar2(20),
  oper_bz varchar2(100)
);

3,创建触发器

我们创建触发器,获取删除操作前的记录信息,并记录相关审计信息。

sql 复制代码
create or replace trigger tri_audit_t_code
    before delete on tpc.t_code
    referencing new as new_value old as old_value
    for each row
      declare
        v_type varchar2(10);
        v_date date;
        v_username varchar2(30);
        v_ip varchar2(20);
        v_bz varchar2(100);
      begin
        select sys_context('userenv','session_user') into v_username from dual;
        select sysdate into v_date from dual;
        select sys_context('userenv','ip_address') into v_ip from dual;
        v_type := 'delete';
        v_bz := '危险操作';
        insert into t_code_audit_log
        (xh,name,bj,gxsj,oper_type,oper_date,oper_username,oper_ip,oper_bz)
        values
        (:old_value.xh,
         :old_value.name,
         :old_value.bj,
         :old_value.gxsj,
         v_type,
         v_date,
         v_username,
         v_ip,
         v_bz);
        end;

4,验证

我们用plsql developer客户端连接到数据库,删除一条记录进行验证:

我们查看我们的审计记录表:

可以看到,审计表中已经记录了我们的日志信息!

相关推荐
C嘎嘎嵌入式开发1 小时前
什么是僵尸进程
服务器·数据库·c++
Yeats_Liao3 小时前
Navicat 导出表结构后运行查询失败ERROR 1064 (42000): You have an error in your SQL syntax;
数据库·sql
明月看潮生4 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 15课题、备份与还原
数据库·青少年编程·postgresql·编程与数学
明月看潮生4 小时前
青少年编程与数学 02-007 PostgreSQL数据库应用 14课题、触发器的编写
数据库·青少年编程·postgresql·编程与数学
加酶洗衣粉9 小时前
MongoDB部署模式
数据库·mongodb
Suyuoa9 小时前
mongoDB常见指令
数据库·mongodb
添砖,加瓦9 小时前
MongoDB详细讲解
数据库·mongodb
Zda天天爱打卡9 小时前
【趣学SQL】第二章:高级查询技巧 2.2 子查询的高级用法——SQL世界的“俄罗斯套娃“艺术
数据库·sql
我的运维人生9 小时前
MongoDB深度解析与实践案例
数据库·mongodb·运维开发·技术共享
步、步、为营9 小时前
解锁.NET配置魔法:打造强大的配置体系结构
数据库·oracle·.net