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