标准数据库审计

要使用数据库审计,必须先将静态AUDIT_TRAIL 参数设置为指向审计记录的存储位置。
这样做可启用数据库审计。启用数据库审计并指定审计选项(登录事件、行使的系统和
对象权限或使用的SQL 语句)后,数据库开始收集审计信息。
如果将AUDIT_TRAIL 设置为OS,审计记录存储在操作系统的审计系统中。在Windows
环境下,审计记录存储在事件日志中。在UNIX 或Linux 环境下,审计记录存储在使用
AUDIT_FILE_DEST 参数指定的文件中。
如果将AUDIT_TRAIL 参数设置为DB 或DB, EXTENDED,您可以在DBA_AUDIT_TRAIL
视图(SYS 方案的一部分)中查看审计记录。
如果AUDIT_TRAIL 设置为XML 或XML,EXTENDED,审计记录会写入
AUDIT_FILE_DEST 参数指向的目录中的XML 文件。使用V$XML_AUDIT_TRAIL 视图
可查看此目录中的所有XML 文件。
维护审计线索是一项重要的管理任务。审计线索可能会迅速地增长,具体取决于审计选项
的审计重点。如果维护不当,审计线索会创建过多的记录,以至影响系统的性能。审计开
销与生成的记录号直接相关。

  1. SQL> show parameters audit
  2. NAME TYPE VALUE
  3. ------------------------------------ ----------- -----------------------------
  4. -
  5. audit_file_dest string /opt/oracle/admin/orcl/adump
  6. audit_sys_operations boolean TRUE
  7. audit_syslog_level string
  8. audit_trail string DB
  9. unified_audit_common_systemlog string
  10. unified_audit_sga_queue_size integer 1048576
  11. unified_audit_systemlog

修改审计存储形式
可以将审计线索设置为:
• NONE
• OS
• DB
• DB, EXTENDED
• XML
• XML, EXTENDED
在修改静态初始化参数之后重新启动数据库

  1. ALTER SYSTEM SET AUDIT_TRAIL='XML' SCOPE=SPFILE;

如果数据库是使用Database Configuration Assistant (DBCA) 创建的,默认情况下,audit_trail 参数设置为DB。
当AUDIT_TRAIL 设置为DB 时,默认的行为是将审计线索记录到数据库的AUD$ 表中,如果数据库是手动创建的(使用CREATE DATABASE 命令),默认将AUDIT_TRAIL 设置为NONE。

通过标准审计收集的额外信息包括:
• 系统更改号(SCN),记录对系统的每一项更改。
• 用户执行的确切SQL 文本及与SQL 文本一起使用的绑定变量。只有已指定
AUDIT_TRAIL=DB, EXTENDED 的情况下,这些列才会出现。
通过细粒度审计收集的额外信息包括:
• 每个审计记录的序列号。
• 将源自一条语句的多个审计条目联系起来的语句编号。
公共属性包括:
• 用全球标准时间(UTC) 表示的全球时间戳。这个字段在监视不同地理位置和不同
时区中的数据库时特别有用。
• 每个Real Application Cluster (RAC) 实例的唯一实例编号。
• 用于将一个事务处理的审计记录组成一组的事务处理标识符。
DBA_COMMON_AUDIT_TRAIL 视图中组合了标准审计日志记录和细粒度审计日志记录。
指定审计选项
SQL 语句审计:

  1. AUDIT table;

系统权限审计(非重点和重点):

  1. AUDIT select any table, create any trigger;
  2. AUDIT select any table BY hr BY SESSION;

对象权限审计(非重点和重点):

  1. AUDIT ALL on hr.employees;
  2. AUDIT UPDATE,DELETE on hr.employees BY ACCESS;

审计成功失败sql语句

  1. AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL;

创建触发器审计特定值

  1. CREATE OR REPLACE TRIGGER system.hrsalary_audit
  2. AFTER UPDATE OF salary
  3. ON hr.employees
  4. REFERENCING NEW AS NEW OLD AS OLD
  5. FOR EACH ROW
  6. BEGIN
  7. IF :old.salary != :new.salary THEN
  8. INSERT INTO system.audit_employees
  9. VALUES (sys_context('userenv','os_user'), sysdate,
  10. sys_context('userenv','ip_address'),
  11. :new.employee_id ||
  12. ' salary changed from '||:old.salary||
  13. ' to '||:new.salary);
  14. END IF;
  15. END;
  16. /

FGA 策略
如果满足FGA 谓词并且引用了相关列,则会对记录进行审计。
• 不管指定列是什么,都会审计DELETE 语句。
• 会审计MERGE 语句以及生成的基础INSERT、UPDATE 和DELETE 语句
FGA 准则
要审计所有行,请使用null 审计条件。
• 要审计所有列,请使用null 审计列。
• 策略名必须唯一。
• 创建策略时,审计的表或视图必须已经存在。
• 如果审计条件语法无效,则访问审计的对象时会出现
ORA-28112 错误。
• 如果表中不存在审计的列,则不会审计任何行。
• 如果不存在事件处理程序,并不会返回任何错误,仍会创建审计记录。
FGA 的审计线索存储在FGA_LOG$ 表中

  1. dbms_fga.add_policy (
  2. object_schema => 'HR', //审计角色名
  3. object_name => 'EMPLOYEES', //审计对象名
  4. policy_name => 'audit_emps_salary', //审计名
  5. audit_condition=> 'department_id=10', //审计条件
  6. audit_column => 'SALARY,COMMISSION_PCT', //审计列
  7. handler_schema => 'secure',
  8. handler_module => 'log_emps_salary',
  9. enable => TRUE, //是否启用了FGA 策略
  10. statement_types => 'SELECT,UPDATE');

SYSDBA 审计
有SYSDBA 或SYSOPER 权限的用户可在数据库处于关闭
状态时进行连接。
• 审计线索必须存储在数据库外部。
• 始终会对以SYSDBA 或SYSOPER 身份执行的连接进行
审计。
• 可使用AUDIT_SYS_OPERATIONS 启用对SYSDBA 或
SYSOPER 操作的附加审计。
• 可使用AUDIT_FILE_DEST 控制审计线索。
启用SYSDBA 审计

  1. AUDIT_SYS_OPERATIONS=TRUE(默认设置为FALSE。)

标准审计的审计线索存储在AUD$ 表中。FGA 的审计线索存储在FGA_LOG$ 表中。默认
情况下,这两个表都是在SYSTEM 表空间中创建的。通过使用数据泵导出和导入实用程序
可将这两个表移到另一表空间中。
注:不支持将审计表移到SYSTEM 表空间外部。
在从审计表中删除记录的过程中,可能会丢失审计记录。
最佳实践提示
请根据时间戳执行导出,然后根据同一时间戳删除审计线索中的行。

Oracle 12c 统一审计(Unified Auditing)

  • 审计

审计功能(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放指定的地方

  • 统一审计
    Oracle Database 12c 推出一套全新的审计架构,称为统一审计功能。统一审计主要利用策略和条件在 Oracle 数据库内部有选择地执行有效的审计。新架构将现有审计跟踪统一为单一审计跟踪,从而简化了管理,提高了数据库生成的审计数据的安全性。

查看统一审计是否开启
value值true为开启

  1. SELECT * FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

(注意:在SE的数据库12.1.0.1和12.1.0.2版本中,由于Bug 17466854的影响,即使完全的统一审计有效的情况下,V$OPTION的Unified Auditing行也表示为FALSE。Bug 17466854将在未来版本12.2中修复。)

  • 开启统一审计
  1. 关闭数据库

    1. shutdown immediate
    2. lsnrctl stop

    2.启用统一审计

    1. cd $ORACLE_HOME/rdbms/lib
    2. make -f ins_rdbms.mk uniaud_on ioracle 开起
    3. make -f ins_rdbms.mk uniaud_off ioracle 禁用

创建审计策略
查询可供使用的actions条件
select * from auditable_system_actions;

  1. create audit policy select_jye actions select on fixf_svr_szhjymx ;

使审计策略有效

  1. audit policy select_jye;

查询创建的策略

  1. select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON from AUDIT_UNIFIED_POLICIES where POLICY_NAME = upper('select_jye');

查询现行运行的策略

  1. select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from AUDIT_UNIFIED_ENABLED_POLICIES;

无效掉审计策略

  1. noaudit policy select_jye;

修改审计策略

  1. alter audit policy select_jye add actions insert on fixf_svr_szhjymx ;
  2. alter audit policy select_jye drop actions select on fixf_svr_szhjymx ;

删除审计策略
注意:在删除某审计策略之前,必须无效掉该审计策略,否则会报ORA-46361错误。

  1. DROP AUDIT POLICY select_jye;

查看审计结果
以前的审计功能,不同的组件会放在不同的位置存储,例如:
SYS.AUD$会存放数据库的标准审计结果
SYS.FGA_LOG$ 会存放细粒度审计结果(fine-grained auditing)
DVSYS.AUDIT_TRAIL$会存放Oracle Database Vault和Oracle Label Security等组件的审计结果
等等。。。
在统一审计功能下,存储和查看更加简单化,所有的审计结果都存放在新追加的AUDSYS schema下,并可以通过字典表UNIFIEDAUDITTRAIL,进行确认。

  1. select * from UNIFIED_AUDIT_TRAIL ;

补充根据审核类别创建统一审计
审核类别

类别 要指定的内容
privileges 一个或多个系统/对象权限
actions 一个或多个SQL命令
roles 一个或多个角色
混合

image.png

image.png
image.png