当前位置: 移动技术网 > IT编程>数据库>Oracle > (Les11 Oracle审计)[20180330]

(Les11 Oracle审计)[20180330]

2018年04月02日  | 移动技术网IT编程  | 我要评论
    说明DBA负责的安全和审计工作
    启用标准数据库审计
    指定审计选项
    复查审计信息
    维护审计线索
        
    《Oracle Database Concepts》《Oracle数据库管理员指南》《Oracle 数据库安全性指南》
 
责任分离
    责任分离的主要要求
        DBA必须是可信任的,同时也必须承担责任(考虑因素)
            滥用信任:DBA可能会滥用DBA_USERS视图中的加密密码
            用审计线索保护受信任位置:审计线索会指定特定人员有没有违反规程和有没有破坏性行为。
        必须共同分担DBA责任
        绝对不要共享账户
        DBA和系统管理员必须由不同的人员担任
        分离操作员与DBA的责任
        
          Oracle Database Valut: 数据库必须强制执行责任分离,或者不允许DBA查看某些或所有数据库schema中的数据,可以使用Oracle Database Vault选件。
数据库安全性
    安全性功能
        -限制对数据和服务的访问,Oracle DB通过提供细粒度的授权控制来限制数据库访问。
        -验证用户
                遵循简单规则的口令
                比较严格的验证方法,令牌或公共密钥基础结构(PKI)证书
                更严格的验证方法,通过诸如指纹,虹膜,骨组织模式等唯一生物学特征来识别用户。
        监视可疑活动
 
监视合规性
     监视或审计是安全过程不可缺少的一部分
        
    强制性审计:不管其他审计选项或参数如何设置,所有Oracle DB都会审计特定的操作。由于数据库需要记录诸如授权用户连接等数据库活动,所以存在强制审计日志。
    标准数据库审计:通过使用audit_trail初始化参数在系统级别启用。启用审计之后,选项要审计的对象和权限,并使用audit命令设置审计属性。
    基于值审计:扩展了标准数据库审计的功能,不仅会捕获发生的审计事件,还会捕获插入,更新或删除的实际值。基于值审计是通过数据库触发器实施的。
    细粒度审计(FGA):扩展了标准数据库审计的功能,从而可捕获发出的实际SQL语句,而不仅仅是发生事件的情况。
    SYSDBA(和SYSOPER)审计:将DBA与审计者或安全管理员的审计责任分离开,审计者或安全管理员在操作系统审计线索中负责监视DBA的活动。
 
    标准数据库审计
    

 

        使用数据库审计,必须先将静态AUDIT_TRAIL参数设置为指向审计记录的存储位置。这样做可启用数据库审计。启用数据库审计并指定审计选项(登录事件,执行的系统和对象权限或使用的SQL语句)后,数据库开始收集审计信息。
            -AUDIT_TRAIL参数设置为OS,审计记录存储在操作系统的审计系统中。ADUIT_FILE_DEST参数指定的文件中
            -ADUIT_TRAIL参数设置为DB或DB,EXTENDED,可以在DBA_ADUIT_TRAIL视图参看审计记录
            -ADUIT_TRAIL参数设置XML或XML,EXTENDED,审计记录会写入ADUIT_FILE_DEST参数指定的目录中的XML文件。使用V$XML_AUDIT_TRAIL视图可查看目录中的所有XML文件。
        维护审计线索是一项重要的管理任务。审计线索可能会迅速地增长,具体取决于审计选项的审计重点。如果维护不当,审计线索会创建过多的记录,以至影响系统的性能。审计开销与生成的记录号直接相关。
        
            ALTER SYSTEM SET ADUIT_TRAIL=[NONE|OS|DB|DB,EXTENDED|XML|XML,EXTENDED] SCOPE=SPFILE;
            修改静态初始化参数之后重新启动数据库。
 
    统一审计线索
        

 

        Oracle DB进行标准审计和细粒度审计时跟踪相同的字段,这使您可以轻松分析数据库活动。为实现这点,标准审计线索和细粒度审计线索包含了彼此互补的属性。
        通过标准审计收集的额外信息包括:
            -系统更改号(SCN),记录对系统的每一项更改。
            -用户执行的确切SQL文本与SQL文本一起使用的绑定变量。只有已指定ADUIT_TRAIL=DB,EXTENDED的情况下,这些列才会出现。
        通过细粒度审计收集的额外信息包括:
            -每个审计记录的序列号
            -将源自一条语句的多个审计条目联系起来的语句编号。
        公共属性包括:
            -用全球标准时间(UTC)表示的全球时间戳。这个字段在监视不同地理位置和不同时区时的数据库时特别有用。
            -每个Real Application Cluster(RAC)实例的唯一实例编号。
            -用于将一个事务处理的审计记录组成一组的事务处理标识符。
        DBA_COMMON_AUDIT_TRAIL视图组合了标准审计日志记录和细粒度审计日志记录。
 
    指定审计选项
        -SQL语句审计
            AUDIT <TABLE_NAME>;
            可按用户名或者按成功或失败来设置SQL语句审计的重点:
                SQL>AUDIT TABLE BY HR WHENEVER NOT SUCCESSFUL;
        -系统权限审计(非重点和重点)
            AUDIT SELECT ANY TABLE,CREATE ANY TRIGGER;
            AUDIT SELECT ANY TABLE BY HR BY SESSION;
            审计设置可以为<BY SESSION>或<BY ACCESS>
        -对象权限审计(非重点和重点)
            AUDIT ALL ON HR.EMPLOYEES;
            AUDIT UPDATE,SELECT,ON HR.EMEPLOYEES BY ACCESS;
            可用來审计关于表,视图,过程,序列,目录和用户定义数据类型的操作.这种审计类型可按成功或失败设置审计的重点,而且可以按会话或访问权限分组.与系统权限审计不同,默认情况下,对象权限审计按会话分组.如果要为每个操作分别生成一条审计线索记录,必须显式指定<BY ACCESS>
 

 

        
audit all on hr.employees;--开启审计
 
col username format a20
col userhost format a30
col sql_text format a30
set linesize 300
 
select username,userhost,sql_text,timestamp from dba_audit_trail
where username='DBMONITOR'
and timestamp>=trunc(sysdate)
and sql_text is not null
/
 
 
noaudit all on hr.employees;--关闭审计
  

 

 
            
 
    使用和维护审计信息
        最佳实践提示
            审计会造成性能下降,其幅度与审计线索的写入数据成比例.要定制满足站点需求的审计选项,可只启用那些满足安全策略所需的选项.设置审计重点,以减少审计线索条目的数量.
            

 

基于值的审计
    进行数据库审计时会记录审计对象中发生的插入,更新和删除操作,但是不会捕获更改的实际值.要扩展数据库审计,可使用基于值的审计,利用数据库触发器(事件驱动的PL/SQL构造)来捕获更改的值.
    CREATE OR REPLACE TRIGGER HR.HRSALARY_AUDIT
    AFTER UPDATE OF SALARY
    ON HR.EMPLOYEES
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
  BEGIN
      IF :OLD.SALARY != :NEW.SALARY THEN
          INSERT INTO HR.AUDIT_EMPLOYEES
              VALUES(SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,SYS_CONTEXT('USERENV','IP_ADDRESS'),:NEW.EMPLOYEE_ID||' SALARY CHANGED FOR '|| :OLD.SALARY||' TO '||:NEW.SALARY);
      END IF;
  END;
 
/
 
 细粒度审计
        -根据内容监视数据访问
        -审计SELECT,INSERT,UPDATE,DELETE和MERGE
        -可链接到表或视图中的一列或多列
        -可以执行某个过程
        -使用DBMS_FGA程序包进行管理
        数据库审计会记录已发生某个操作这一事实,但是不会捕获关于导致操作的语句的信息。细粒度审计(FGA)扩展了审计功能,可捕获查询或处理数据的实际SQL语句。与标准数据库审计或基于之的数据库审计相比,FGA将重点审计的范围设置得更窄。可将FGA选项设置为按表或视图中的各个列进行审计,还可以将其设置为条件选项,以便只在符合管理员定义的特定规范时才捕获审计。FGA策略支持多个相关列。默认情况下,如果其中任何一个出现在SQL语句中,就会审计该语句。通过使用DBMS_FGA.ALL_COLUMNS和DBMS_FGA.ANY_COLUMNS,可对语句中是否使用了任何或全部相关列来进行审计。
        可以使用DBMS_FGA PL\SQL程序包来创建对目标表或视图的审计策略。如果查询块中返回的任何与审计列和指定的审计条件相匹配,则审计事件会导致在审计线索中创建并存储审计记录。此外,审计事件还可执行某个过程。FGA自动将审计重点放在语句级别。一个SELECT语句会返回数千行,但只生成一条审计记录。
 
    FGA策略
        
        
COL username FORMAT a20
COL userhost FORMAT a30
COL sql_text FORMAT a30
SET LINESIZE 300
 
SELECT username,
       userhost,
       sql_text,
       timestamp
  FROM dba_audit_trail
 WHERE     username = 'DBMONITOR'
       AND timestamp >= TRUNC (SYSDATE)
       AND sql_text IS NOT NULL
/
 
 
BEGIN
   DBMS_FGA.add_policy (object_schema     => 'HR',--FGA审计对象schema
                        object_name       => 'EMPLOYEES',--审计table
                        policy_name       => 'audit_emps_salary',--FGA审计名称
                        audit_condition   => 'department_id=10',--FGA审计条件
                        audit_column      => 'SALARY,COMMISSION_PCT',--FGA审计的列名
                        handler_schema    => 'secure',--指定调用schema
                        handler_module    => 'log_emps_salary',--指定执行程式
                        enable            => TRUE,--启用审计
                        statement_types   => 'SELECT,UPDATE');--审计dml类型
END;
/
 
BEGIN--删除fga审计
   DBMS_FGA.drop_policy (object_schema   => 'HR',
                         object_name     => 'EMPLOYEES',
                         policy_name     => 'audit_emps_salary');
END;
/
 
BEGIN
   DBMS_FGA.add_policy (object_schema     => 'HR',
                        object_name       => 'EMPLOYEES',
                        policy_name       => 'audit_emps_salary',
                        audit_condition   => 'department_id=10',
                        audit_column      => 'SALARY,COMMISSION_PCT',
                        --handler_schema    => 'secure',--如果不指定存储路径,默认会存放在dba_fga_audit_trail视图中
                        -- handler_module    => 'log_emps_salary',
                        enable            => TRUE,
                        statement_types   => 'SELECT,UPDATE');
END;
/
 
 
SELECT salary
  FROM employees
 WHERE department_id = 10;
 
SELECT commission_pct
  FROM employees
 WHERE department_id = 10;
 
SELECT salary, commission_pct
  FROM employees
 WHERE department_id = 10;
 
DELETE employees
 WHERE department_id = 10;
 
 
 
SELECT salary, commission_pct FROM employees;
 
COL DB_USER FORMAT a20
COL userhost FORMAT a30
COL sql_text FORMAT a30
SET PAGESIZE 600
SET LINESIZE 300
ALTER SESSION SET nls_date_format='YYYY-MM-DD HH24:MI:SS';
 
SELECT DB_USER,
       userhost,
       sql_text,
       timestamp
  FROM dba_fga_audit_trail
 WHERE --DB_USER='DBMONITOR'
       timestamp >= TRUNC (SYSDATE) AND sql_text IS NOT NULL
/
 
DB_USER              USERHOST                       SQL_TEXT                       TIMESTAMP
-------------------- ------------------------------ ------------------------------ -------------------
DBMONITOR            *****************              SELECT salary FROM hr.employee 2018-03-30 11:04:44
                                                    s WHERE department_id=10
 
HR                   *****************              SELECT salary FROM employees w 2018-03-30 11:15:59
                                                    here department_id=10
 
HR                   *****************              SELECT commission_pct FROM emp 2018-03-30 11:16:31
                                                    loyees WHERE department_id=10
 
HR                   *****************              SELECT salary,commission_pct f 2018-03-30 11:17:00
                                                    rom employees WHERE department
                                                    _ID=10
 
HR                   *****************              SELECT salary,commission_pct f 2018-03-30 11:17:00
                                                    rom employees
 

 

    审计的DML语句,注意事项
        -如果满足FGA谓词并且引用了相关列,则会对记录进行审计.
        -无论指定的列是什么,都会审计DELETE语句.
        -会审计MEEGE语句以及生成的INSERT/UPDATE和DELETE语句。
        
 
 
BEGIN
   DBMS_FGA.add_policy (object_schema     => 'HR',
                        object_name       => 'EMP',
                        policy_name       => 'audit_emp_salary',
                        audit_condition   => 'department_id=90',
                        --audit_column      => 'SALARY,COMMISSION_PCT',
                        --handler_schema    => 'secure',
                        -- handler_module    => 'log_emps_salary',
                        enable            => TRUE,
                        statement_types   => 'DELETE');
END;
/
 
BEGIN
   DBMS_FGA.drop_policy (object_schema   => 'HR',
                         object_name     => 'EMP',
                         policy_name     => 'audit_emp_salary');
END;
/
 
DELETE emp
 WHERE department_id = 90;
 
SELECT SALARY, COMMISSION_PCT
  FROM emp
 WHERE department_id = 90;
 
DELETE emp ;
 
SELECT DB_USER,
       userhost,
       sql_text,
       timestamp
  FROM dba_fga_audit_trail
 WHERE --DB_USER='DBMONITOR'
       timestamp >= TRUNC (SYSDATE) AND sql_text IS NOT NULL
/
 

 

  

 
    FGA准则
        -要审计所有行,请使用NULL审计条件
        -要审计所有列,请使用NULL审计列
        -策略名必须唯一
        -创建策略时,审计的表或视图必须已经存在
        -如果审计条件语法无效,则访问审计的对象时会出现ORA-28112错误
        -如果表中不存在审计的列,则不会审计任何行
        -如果不存在事件处理程序,并不会返回任何错误,仍会创建审计记录。查询时触发‘ORA-28137: 无效FGA 审计程序’
 
    SYSDBA审计
        具有SYSDBA或SYSOPER权限的用户可在数据库处于关闭状态时进行连接。
            -审计线索必须存储在数据库外部
            -始终会对以SYSDAB或SYSOPER身份执行的连接进行审计
            -可使用AUDIT_SYS_OPEARATIONS启用对SYSDBA或SYSOPER操作的附加审计
            -可使用AUDIT_FILE_DEST控制审计存储路径
 
    维护审计线索
        应根据最佳实践准则来维护审计线索:
            -复查和存储旧记录
            -避免出现存储问题
            -避免记录丢失,标准审计的审计线索存储在AUD$表中,FGA审计线索存储在FGA_LOG$表中。默认情况下,这两个表都是SYSTEM表空间中。通过使用数据泵导出和导入可将这两个表迁移到另一个表空间中。
 
            ALTER TABLE SYS.AUD$ MOVE TABLESPACE <TABLESPACE_NAME>;
            SYS.FGA_LOG$--表上有LONG字段无法进行直接迁移,可采用DROP再CREATE.
        
3:53:14 SQL> select table_name,tablespace_name from dba_tables
13:53:21   2  where table_name='AUD$';
 
TABLE_NAME        TABLESPACE_NAME
----------------  ------------------------------------------------------------
AUD$               TP
 
13:53:23 SQL> ALTER TABLE SYS.AUD$ MOVE TABLESPACE SYSTEM;
 
13:53:59 SQL> select table_name,tablespace_name from dba_tables
13:54:02   2  where table_name='AUD$';
 
TABLE_NAME        TABLESPACE_NAME
----------------- ------------------------------------------------------------
AUD$              SYSTEM

 

Oracle Audit Vault
    合并和保护审计数据
        -Oracle 9i发行版2和更高的版本
        -SQL Server 2000,2005
        -IBM DB2 UDB 8.5和9.2
        -Sybase ASE 12.5-15.0
        -安全并可伸缩
        -清理源Oracle审计数据
    集中式报告
        -报表界面进行了更新,Oracle Application Express
        -合规性标准报表
        -新增定制报表
    安全威胁预警
        -检测和警告安全相关事件
 
 
 
总结
    审计类型:强制审计,标准审计,基于值的审计,细粒度的审计,SYSDBA/SYSOPER审计
    标准审计:audit_trail参数控制,NONE,OS,DB, DB EXTENDED,XML,XML, XML,EXTENDED,通过DBA_AUDIT_TRAIL视图查询,基表AUD$
    基于值的审计:触发器实现
    细粒度的审计:FGA,DBMS_FGA.ADD_POLICY,通过DBA_FGA_AUDIT_TRAIL视图查看,基表FGA_LOG$
    SYSDBA/SYSOPER审计

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网