Oracle OCP笔记(20)数据库安全与审计

来源:互联网 发布:淘宝怎么换货 编辑:程序博客网 时间:2024/05/22 06:19

Oracle OCP笔记(20)数据库安全与审计



一.审计SYSDBA活动
    启用审计SYSDBA活动,作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统的审计跟踪,从而能够给出dba所进行操作的完整记录。
    审计跟踪必须受到保护,如果dba能够删除审计记录,那么创建这些审计记录就毫无意义。因此,dba不应该拥有操作系统的超级用户权限。
    关于审计的参数:
    audit_sys_operations  -- 是否启用审计SYSDBA活动,默认情况为TRUE
    audit_file_dest       -- 审计跟踪文件所在目录
    select name,value from v$parameter where name like 'audit%';
    
二.数据库审计
    设置数据库审计之前,必须设置audit_trail参数,参数值:
    ·NONE(或者FALSE): 禁用数据库审计
    ·OS: 审计记录会被写至操作系统的审计跟踪目录(audit_file_dest所在目录).
    ·DB:审计记录会被写入数据字典表sys.aud$.
    ·DB_EXTENDED: 与DB大体相同,不过包含生成审计记录的、具有绑定变量的SQL语句.
    ·XML: 与OS的作用大体相同,但使用XML标记设置格式.
    ·XML_EXTENDED: 与XML大体相同,但使用SQL语句和绑定变量.
    设置audit_trail参数后,就可以使用数据库审计来捕获登录尝试、系统权限与对象权限的使用以及SQL命令的执行,还可以指定当这些事件成功和/或因权限控制而失败时是否对它们进行审计。审计对没有成功执行的命令特别有用,此时生成的任何记录都会说明用户试图违反自己的访问权限。
    使用audit命令可以配置数据库审计:
    SQL> audit create any trigger;
    SQL> audit select any table by session;  
    SQL> audit select any table by access;
    -- by session审计会为违反审计条件的每个会话生成一条审计记录,不考虑违反条件的次数.
    -- by access为每次违反条件的情况生成一条记录。
    SQL> audit insert on ar.hz_parties whenever successful;  -- 在指定表插入一行就会生成审计记录
    SQL> audit all on ar.ra_interface_lines_all;             -- 审计针对指定表执行DDL语句的每个会话.
    -- whenever successful 审计记录限制为操作成功的记录
    -- whenever not successful 
    SQL> audit session whenever not successful;              -- 审计登录
    
    如果要审计操作系统(audit_trail参数设置为OS或XML),使用适当的编辑器,查看在操作系统审计跟踪中创建的文件,查看审计结果。
    如果审计针对数据库(audit_trail参数设置为DB或DB_EXTENDED),审计记录写入数据字典表sys.aud$中,但一般使用视图dba_audit_trail查看审计结果。
    
    审计视图
    dba_audit_trail
    dba_audit_object
    dba_audit_statement
    dba_audit_session
    
三.使用触发器执行基于值的审计
    数据库审计可以捕获到针对某个表执行一条命令的事实,但是没有跟踪受影响的行。例如,如果执行audit insert on hr.employees命令,只要在指定表中插入一行就会生成一条审计记录,但是该审计记录不会包含插入行的实际值。有些时候,我们希望捕获这些实际值,此时就需要使用数据库触发器。
    
CREATE OR REPLACE TRIGGER system.creditrating_audit
AFTER UPDATE OF creditrating
ON oe.customers
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
  IF :old.creditrating != :new.creditrating THEN
    INSERT INTO system.creditrating_audit VALUES(sys_context('userenv','os_user'),sys_context('userenv','ip_address'),:new.cust_id||' credite trating changed from '||:old.creditrating||' to '||:new.creditrating);      
  END IF;
END;
/


四.细粒度审计(fine-grained auditing,FGA)
    细粒度审计可以被配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以被配置为在违反审计条件时运行一个PL/SQL代码块.
    配置细粒度审计需要使用程序包dbms_fga.创建审计策略使用过程add_policy.
    过程add_policy的参数:
    ·object_schema
    ·object_name
    ·policy_name
    ·audit_condition
    ·audit_column
    ·handler_schema     -- 达到审计条件时所运行过程的用户名
    ·handler_module     -- 达到审计条件时所运行的PL/SQL过程
    ·enable             -- TRUE/FALSE,启用和禁用
    ·statement_types    -- 审计的语句类型: SELECT、INSERT、UPDATE、DELETE
    ·audit_trail
    ·audit_column_opts  -- DBMS_FGA_ANY_COLUMNS/DBMS_FGA_ALL_COLUMNS
    
    创建审计策略例子:
    dbms_fga.add_policy(object_schema => 'HR',
                        object_name => 'EMPLOYEES',
                        policy_name => 'POL1',
                        audit_condition = 'department_id=80',
                        audit_column => 'SALARY');
    
    审计视图:
    dba_audit_trail                    
    dba_fga_audit_trail

    dba_common_audit_trail


0 0
原创粉丝点击