ORACLE_OCP之实施Oracle数据库审计

  • 文章目标:
  • 描述DBA的安全性和审计职责
  • 启用统一审计
  • 创建统一审计策略
  • 维护审计记录

一、数据库安全

  • 一个安全的系统可确保其中包含的数据的机密性。 安全性主要有以下几个方面:
  • 限制对数据和服务的访问
  • 验证用户
  • 监控可疑活动

二、监视的合规性

  • 监视和审计是安全过程钟不可缺少的一部分.
  • 请复查下列各项:
  • Mandatory auditing – 强制审计
  • Standard database auditing – 标准数据库审计
  • Value-based auditing – 基于值的审计
  • Fine-grained auditing (FGA) – 细粒度审计

三、需要审计的活动类型

  • 您可以在以下活动中进行审计:
  • User accounts, roles, and privileges –用户账号操作 角色和权限
  • Object actions – 对象操作
  • Application context values – 应用程序上下文的值
  • Oracle Data Pump – ORACLE数据泵
  • Oracle Database Real Application Security – RAC安全
  • Oracle Database Vault – 数据库加密系统
  • Oracle Label Security – OACLE标签安全
  • Oracle Recovery Manager – RMAN恢复管理
  • Oracle SQL*Loader direct path events – SQLLOADER直接路径事件
  • 。。。。。
SQL> show parameter audit;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /u01/app/oracle/admin/orcl/adu
                                                 mp
audit_sys_operations                 boolean     TRUE
audit_syslog_level                   string
audit_trail                          string      DB
unified_audit_sga_queue_size         integer     1048576

四、强制审计

  • 强制审计会审计以下内容:
  • CREATE/ALTER/DROP AUDIT POLICY
  • AUDIT/NOAUDIT
  • EXECUTE of:
  • DBMS_FGA
  • DBMS_AUDIT_MGMT
  • ALTER TABLE against AUDSYS audit trail table
  • Top-level statements by administrative users (SYS, SYSDBA, SYSOPER, SYSASM, SYSBACKUP, SYSDG, and SYSKM) until the database opens

五、理解有关于审计的实施

  • 在创建新的Oracle Database 12c数据库时,默认情况下使用混合审计模式.
  • 混合审计模式可以使用在:
  • Oracle Database 12c之前的审计功能
  • Oracle Database 12c之后的默认为统一审核功能
  • Oracle的建议是使用统一审核.
  • 查询V $ OPTION以确定数据库是否已是统一审核:

SELECT value FROM v$option WHERE parameter = ‘Unified Auditing’;

六、管理审计操作所需的角色

  • 必须授予用户以下角色之一才能执行审计:
  • AUDIT_ADMIN使用户能够:
  • 创建统一且细粒度的审计策略
  • 执行AUDIT(审计)和NOAUDIT (非审计)SQL语句
  • 查看审计数据
  • 维护和管理审计跟踪(AUDSYS模式中的表)
  • AUDIT_VIEWER这个权限可以让用户
  • 查看和分析审计数据

七、数据库审计流程

Postgresql数据库安全 审计 数据库安全配置审计_Database

八、理解审计架构

Postgresql数据库安全 审计 数据库安全配置审计_SQL_02

九、开启统一审计( unified auditing )(本例中具体的库和监听启停过程参照公司流程要求)

  • 在SQLPLUS找那个关闭数据库:

SQL> SHUTDOWN IMMEDIATE

  • 关闭监听:

$ lsnrctl stop

  • 在操作系统的命令提示符下(LINUX),启用统一审核可执行文件:

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME

  • 重启监听:

$ lsnrctl start

  • 使用SQLPLUS打开数据库:

SQL> STARTUP

十、配置审计

Method

Description

统一审计策略

将审计设置分入到策略组中

默认统一审计策略

Three default policies:ORA_SECURECONFIG、ORA_DATABASE_PARAMETER_AUDIT、ORA_ACCOUNT_MGMT_AUDIT

细粒度的审计策略

定义审计触发时必须满足的特定条件

  • Oracle数据库包括三个预定义的统一审计策略,其中包括常用的安全审计设置:
  • ORA_SECURECONFIG:包含与Oracle Database 11g相同的默认审计设置。 默认情况下,此策略为统一审核和混合模式审核环境启用。 有关设置的完整列表,请参考《 Oracle数据库安全指南12c》。
  • ORA_DATABASE_PARAMETER_AUDIT:包含用于设置参数(ALTER DATABASE,ALTER SYSTEM和CREATE SPFILE)的常用Oracle数据库命令的审计设置
  • ORA_ACCOUNT_MGMT_AUDIT:包含常用用户帐户和特权命令的审核设置(CREATE USER,ALTER USER,DROP USER,CREATE ROLE,DROP ROLE,ALTER ROLE,SET ROLE,GRANT和REVOKE)

十一、创建统一审计策略

  • 使用CREATE AUDIT POLICY 语句:

CREATE AUDIT POLICY select_emp_pol –审计名
ACTIONS select on hr.employees -审计动作

  • 创建审计策略:系统范围的审计选项
  • 对系统权限进行审计:

CREATE AUDIT POLICY audit_syspriv_pol1
PRIVILEGES SELECT ANY TABLE, CREATE LIBRARY

  • 对ALTER TRIGGER操作进行审计:

CREATE AUDIT POLICY audit_actions_pol2
ACTIONS AUDIT, ALTER TRIGGER

  • 对角色进行审计:

CREATE AUDIT POLICY audit_role_pol3
ROLES mgr_role

  • 对系统权限 相应操作和角色进行审计:

CREATE AUDIT POLICY audit_mixed_pol4
PRIVILEGES DROP ANY TABLE
ACTIONS CREATE TABLE, DROP TABLE, TRUNCATE TABLE
ROLES emp_role

  • 创建审计策略:特定对象审计选项
  • 根据特定的对象选项(对象权限)创建审计策略.

CREATE AUDIT POLICY audit_objpriv_pol5
ACTIONS SELECT, UPDATE, LOCK ON hr.employees

CREATE AUDIT POLICY audit_objpriv_pol6
ACTIONS ALL

CREATE AUDIT POLICY audit_objpriv_pol7
ACTIONS EXECUTE, GRANT ON hr.raise_salary_proc

  • 创建审计策略:指定条件
  • 条件和评估PER SESSION(每个会话)

CREATE AUDIT POLICY audit_mixed_pol5
ACTIONS RENAME ON hr.employees,ALTER ON hr.jobs,
WHEN ‘SYS_CONTEXT (’‘USERENV’’, ‘‘SESSION_USER’’)=’‘JIM’’’
EVALUATE PER SESSION

  • 条件和评估PER STATEMENT(每个语句)

CREATE AUDIT POLICY audit_objpriv_pol6
ACTIONS ALTER ON OE.ORDERS
WHEN ‘SYS_CONTEXT(’‘USERENV’’,’‘CLIENT_IDENTIFIER’’)=’‘OE’’’
EVALUATE PER STATEMENT

  • 条件和评估PER INSTANCE(每个实例)

CREATE AUDIT POLICY audit_objpriv_pol7
ROLES dba
WHEN SYS_CONTEXT(’‘USERENV’’,’‘INSTANCE_NAME’’)=’‘sales’’’
EVALUATE PER INSTANCE

十二、启用和禁用审计策略

  • 启用审计策略:
  • 适用于所有用户.

SQL> AUDIT POLICY audit_syspriv_pol1;

  • 仅适用于某些用户.

SQL> AUDIT POLICY audit_pol2 BY scott, oe;
SQL> AUDIT POLICY audit_pol3 BY sys;

  • 排除某些用户.

SQL> AUDIT POLICY audit_pol4 EXCEPT jim, george;

  • 根据失败或成功操作定义审计记录.

SQL> AUDIT POLICY audit_syspriv_pol1 WHENEVER SUCCESSFUL ;
SQL> AUDIT POLICY audit_objpriv_pol2 WHENEVER NOT SUCCESSFUL ;
SQL> AUDIT POLICY auditpol5 BY joe WHENEVER SUCCESSFUL ;

注意:通过使用NOAUDIT命令禁用审计策略。

十三、更改统一审核策略

  • 使用ALTER AUDIT POLICY语句:

ALTER AUDIT POLICY select_emp_pol
ADD ACTIONS select on hr.job_history

  • 使用EMCC:

十四、查看审计策略信息

SQL> SELECT policy_name, audit_option, condition_eval_opt FROM audit_unified_policies;

SQL> SELECT policy_name, enabled_opt, user_name, success, failure FROM audit_unified_enabled_policies;

十五、设置审计跟踪记录的写入模式

Postgresql数据库安全 审计 数据库安全配置审计_oracle_03

  • 立即写入模式:立即写入审核记录。

SQL> EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);

  • 排队写入模式:SGA队列的内容定期写入磁盘。 这是默认模式。

SQL> EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,-
DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);

十六、Value-Based Auditing(基于值的审计)

Postgresql数据库安全 审计 数据库安全配置审计_oracle_04

  • 典型基于值的审计触发器的示例:
CREATE OR REPLACE TRIGGER system.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 system.audit_employees
    VALUES (sys_context('userenv','os_user'), sysdate, 
    sys_context('userenv','ip_address'),
    :new.employee_id ||
		    ' salary changed from '||:old.salary|| 
		    ' to '||:new.salary);
  END IF; 
END;
/

十七、Fine-Grained Auditing(细粒度审计 FGA)

  • 根据内容监视数据访问
  • 审核SELECT,INSERT,UPDATE,DELETE和MERGE
  • 可以链接到表或视图中的一个或多个列
  • 可以执行一个程序
  • 通过DBMS_FGA软件包进行管理

十八、FGA Policy(审计策略)

Postgresql数据库安全 审计 数据库安全配置审计_oracle_05

十九、审计DML操作:注意事项

  • 如果满足FGA谓词并引用了相关列,则对记录进行审计。
  • 无论指定了什么列,都将审计DELETE语句。
  • MERGE语句使用基础的INSERT,UPDATE和DELETE生成的语句进行审计。

二十、FGA Guidelines(细粒度)

  • 要审计所有行,请使用审计条件。
  • 要审计所有列,请使用审计列。
  • 策略名称必须唯一。
  • 创建策略时,已审计的表或视图必须已经存在。
  • 如果审计条件语法无效,则在访问审计对象时会引发ORA-28112错误。
  • 如果表中不存在已审计的列,则不审计任何行。
  • 如果事件处理程序不存在,则不会返回任何错误,并且仍会创建审计记录。

二十一、归档和清除审计记录

  • 定期归档并清除审计记录,以防止其过大.
  • 创建审计归档:
  • 将审计跟踪记录复制到数据库表
  • 使用Oracle Audit Vault
  • 清除审计日志:
  • 通过使用DBMS_AUDIT_MGMT.CREATE_PURGE_JOB PL / SQL过程,创建计划并在指定时间运行的清除作业
  • 使用DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL PL / SQL过程手动进行
  • 安排自动清除作业:

DBMS_AUDIT_MGMT.CREATE_PURGE_JOB
(AUDIT_TRAIL_TYPE=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, AUDIT_TRAIL_PURGE_INTERVAL => 12,
AUDIT_TRAIL_PURGE_NAME => ‘Audit_Trail_PJ’,
USE_LAST_ARCH_TIMESTAMP => TRUE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

  • 手动清除审计记录

DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED)