Oracle DML与DDL审计

在日常业务开发中,经常会遇到很多数据被篡改和遗失的问题,这时候就可以借助触发器和存储过程来稽查期间内是否有对数据进行操纵的人员,建议用于开发及测试环境,生产环境不推荐。

一、DML审计

-- 1.创建需要监视的表
create table AA_USER
(
  name     VARCHAR2(25),
  sex      VARCHAR2(5),
  a_uid    VARCHAR2(255) not null,
  birthday DATE
);
-- 2.创建DML审计记录表
create table AUDIT_DML_OBJ(
    Opr_Time date default sysdate, /* 操作时间 */
    Session_Id NUMBER(*), /* 会话ID */
    OS_User VARCHAR2(200), /* 终端OS用户 */
    IP_Address VARCHAR2(200), /* 终端IP地址 */
    Terminal VARCHAR2(200), /* 终端 */
    Host VARCHAR2(200), /* 终端主机名 */
    User_Name VARCHAR2(200), /* ORACLE 用户名*/
    DML_Type VARCHAR2(64),
    TABLE_NAME  VARCHAR2(64),
    change clob
);
-- 3.利用存储过程,根据表名快速创建触发器(该触发器现仅支持VARCHAR2、DATE和NUMBER字段)
create or replace procedure DML_TRIGGER_PRODUCER(TAB_NAME in varchar2)
AUTHID CURRENT_USER -- 支持存储过程创建表、触发器等
IS
    CURSOR col_query IS SELECT column_name as col_name, data_type from user_tab_columns where table_name = upper(TAB_NAME);
    V_SQL CLOB;  /* 生成触发器的sql */
BEGIN
    -- 1.触发器首
    V_SQL :=
'create or replace trigger TR_DML_'||upper(TAB_NAME)||'
after insert or update or delete
    ON '||upper(TAB_NAME)||' REFERENCING OLD as old New as new
    FOR EACH ROW
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); /* 终端主机名 */
    OLD_DATA CLOB;
    NEW_DATA CLOB;
BEGIN
    /* 获取操作用户信息 */
    SELECT SYS_CONTEXT(''USERENV'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值