zoukankan      html  css  js  c++  java
  • 记录一则FGA审计“A用户对B用户某张表的更新操作”需求

    环境:Oracle 11.2.0.4
    我这里测试A用户为JINGYU,要审计的表为B用户SCOTT下的EMP表。通过FGA来实现。

    1.添加审计策略

    官方文档语法:

    DBMS_FGA.ADD_POLICY(
    object_schema VARCHAR2,
    object_name VARCHAR2,
    policy_name VARCHAR2,
    audit_condition VARCHAR2,
    audit_column VARCHAR2,
    handler_schema VARCHAR2,
    handler_module VARCHAR2,
    enable BOOLEAN,
    statement_types VARCHAR2,
    audit_trail BINARY_INTEGER IN DEFAULT,
    audit_column_opts BINARY_INTEGER IN DEFAULT);

    添加审计策略,目标是审计JINGYU用户有更新SCOTT用户下EMP表的操作。

    --审计JINGYU用户有更新SCOTT用户下EMP表的操作
    BEGIN
    dbms_fga.add_policy(
    object_schema => 'SCOTT',
    object_name => 'EMP',
    policy_name => 'FGA_TEST_01',
    audit_condition => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''JINGYU'' ',
    statement_types    =>  'UPDATE');
    END;
    /
    

    这里主要是audit_condition的写法,有一个SYS_CONTEXT('USERENV','SESSION_USER')写法:

    select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';
    

    测试一下,证明这样写where条件是有效的:

    SQL> show user
    USER is "JINGYU"
    SQL> select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';
    
    D
    -
    X
    
    SQL> conn ludan
    Enter password: 
    Connected.
    SQL> show user
    USER is "LUDAN"
    SQL>  select * from dual where SYS_CONTEXT('USERENV','SESSION_USER') = 'JINGYU';
    
    no rows selected
    
    SQL> 
    

    2.测试审计效果

    查询FGA_LOG$,确认审计效果:
    select * from FGA_LOG$ where OBJ$NAME = 'EMP';
    

    测试审计效果:

    • 使用JINGYU用户更新SCOTT.EMP下的一条记录;预期结果是有审计信息生成。
    • 使用LUDAN用户更新SCOTT.EMP下的一条记录;预期结果是无审计信息生成。

    3.控制审计策略

    **3.1 禁用/启用审计策略** 官方文档语法:

    --禁用审计策略
    DBMS_FGA.DISABLE_POLICY(
    object_schema VARCHAR2,
    object_name VARCHAR2,
    policy_name VARCHAR2 );
    --启用审计策略
    DBMS_FGA.ENABLE_POLICY(
    object_schema VARCHAR2,
    object_name VARCHAR2,
    policy_name VARCHAR2,
    enable BOOLEAN);

    --禁用审计策略
    BEGIN
    DBMS_FGA.DISABLE_POLICY (
    object_schema   =>  'scott',
    object_name     =>  'emp',
    policy_name     =>  'FGA_TEST_01');
    END;
    /
    
    --启用审计策略
    BEGIN
    DBMS_FGA.ENABLE_POLICY (
    object_schema    =>  'SCOTT',
    object_name      =>  'EMP',
    policy_name      =>  'FGA_TEST_01',
    enable           =>   TRUE);
    END;
    /
    

    3.2 删除审计策略
    官方文档语法:

    DBMS_FGA.DROP_POLICY(
    object_schema VARCHAR2,
    object_name VARCHAR2,
    policy_name VARCHAR2 );

    --删除policy
    BEGIN
    DBMS_FGA.DROP_POLICY(
       object_schema  => 'SCOTT',
       object_name => 'EMP',
       policy_name => 'FGA_TEST_01');
    END;
    /
    
  • 相关阅读:
    校外实习-7.28
    校外实习-7.27
    校外实习-7.26
    校外实习-7.25
    校外实习-第三周总结
    校外实习-7.22
    校外实习-7.21
    校外实习-7.20
    作业九—总结
    结对编程项目---四则运算(截图总结篇)
  • 原文地址:https://www.cnblogs.com/jyzhao/p/9169205.html
Copyright © 2011-2022 走看看