(Les11 Oracle审计)[20180330]

的     说明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审计

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐