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

在数据安全重于一切的年度,如何进行数据保护就成为了计算机系统管理工作中的重中之重。很多大型企业,运行商和政府等单位中,可以通过采购各类安全设备(如数据库审计、日志审计、堡垒机等)进行数据监管和保护。但很多中小企业的业务系统中,没有足够预算,也没有计划去采购安全设备去进行数据监管和保护。这个时候,我们可以利用数据自身的功能,生成自己的日志审计记录,进而完成数据的监管和保护。下面我们通过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客户端连接到数据库,删除一条记录进行验证:

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

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

相关推荐
lunz_fly19922 小时前
Oracle清理:如何安全删除trace, alert和archivelog文件?
oracle
薛定谔的算法3 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend5 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术6 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维10 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉10 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger1 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化