审计是监视和和记录所选数据库操作,包括数据库用户和非数据库用户;可调查可疑操作,监控用户行为;审计有强制审计、标准审计、统一审计、混合审计、Value-Based审计、细粒度审计

一、强制审计

信息存放在$ORACLE_BASE/admin/$ORACLE_SID/adump,当数据库发生以下动作时,数据库会强制审计无论是否配置audit_trial参数。

1、database startup、database shutdown

2、SYS,SYSDBA, SYSOPER, SYSASM, SYSBACKUP, SYSDG, and SYSKM操作

3、create/alter/drop audit policy

4、audit/noaudit

5、EXECUTE DBMS_FGA/DBMS_AUDIT_MGMT

6、ALTER TABLE

 

二、标准审计

受参数audit_trail参数控制;

1、标准审计类型

(1)audit_trail=db(默认):将审计信息记录到sys.aud$表中,此时不会记录强制审计信息和sys用户审计记录

(2)audit_trail=db,extended:将审计信息记录到sys.aud$表中,同时记录sql绑定的变量值和sql语句

(3)audit_trail=os:将审计信息记录到操作系统文件中,包括数据库审计跟踪

(4)audit_trail=xml:将审计信息记录到xml文件中

(5)audit_trail=xml,extended:将审计信息记录到xml文件中,同时记录sql绑定变量和sql语句

(6)audit_trail=none:禁用审计功能

2、启用标准审计

ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE;

 

三、统一审计(19c以前审计信息放在不同位置,19c以后统一审计将所有审计信息放在单张表中)

审计信息统一放在UNIFIED_AUDIT_TRAIL(AUDSYS架构中的只读表SYSAUX)视图中,除了sys用户,被授予AUDIT_ADMIN和AUDIT_VIEWER角色的用户可以查询这些视图;启动统一审计之后,还需配置相应的审计策略,启用统一审计至少启用一条审计策略;停止统一审计之后,要关闭所有审计策略。

1、开启统一审计

SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';  //查看数据库是否开启了统一审计,如果是false说明没有开启统一审计

alpine samba 审计 advocacy审计_数据库

关闭监听和数据库,开启统一审计后重启监听和数据库,并查看统一审计是否开启

SHUTDOWN IMMEDIATE;  //关闭数据库
exit;
lsnrctl stop;  //停止监听
//开启统一审计
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
lsnrctl start;  //开启监听
sqlplus / as sysdba;
startup;  //开启数据库
SELECT value FROM v$option WHERE parameter = 'Unified Auditing' ;  //查看是否开启了统一审计

 

alpine samba 审计 advocacy审计_SQL_02

 2、系统预定于统一审计策略

ORA_SECURECONFIG是统一审计和混合审计默认的策略;ORA_DATABASE_PARAMETER_AUDIT是常用的oracle参数设置,如ALTER DATABASE,ALTER SYSTEM,CREATE SPFILE;ORA_ACCOUNT_MGMT_AUDIT审计常用账号和权限设置,例如CREATE USER,ALTER USER,DROP USER,CREATE ROLE。

3、用户自定义审计策略

特定对象审计

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

4、启用审计策略(这时针对所有用户,如果要限定用户可以在后面加上 by user1,user2或者except user1,user2)

AUDIT POLICY audit_objpriv_pol1;

5、停止审计策略(限定用户方法桶启用审计策略)

NOAUDIT POLICY audit_objpriv_pol1;

6、相关视图使用

select policy_name,enabled_option from audit_unified_enabled_policies;  //查看当前正在使用的审计策略

alpine samba 审计 advocacy审计_alpine samba 审计_03

 

四、混合审计

是19c的默认审计,既有19c以前的审计方式,又有19c的统一审计方式。

 

五、Value-Based审计

基于触发器实现的审计功能,只有当使用标准审计功能不满足需求时,才使用该种审计。

 

六、细粒度审计

开启FGA,并审计相应操作

1、定义策略

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',
statement_types => 'SELECT,UPDATE');
end;
/

object_schema:指定要审计的对象的模式;object_name:指定要审计的对象的名称;policy_name:指定要创建的策略的名称,确保此名称是唯一的;audit_condition:审计的相关条件,如果为null或未指定,则对表执行的任何审计都会被记录;audit_column:指定要审核的一列或多列,包括隐藏列。如果设置为NULL或省略;Enable:使用 true 或 false 启用或禁用策略;statement_types:指定要审计的 SQL 语句:INSERT、UPDATE、DELETE或SELECT。

select policy_name from dba_audit_policies;  //查看审计策略是否创建成功

alpine samba 审计 advocacy审计_数据库_04

select employee_id,last_name,salary from hr.employees where department_id=10;   //对department_id=10的行执行select
select SQL_TEXT from UNIFIED_AUDIT_TRAIL where object_schema= 'HR';   //查看审计记录

alpine samba 审计 advocacy审计_数据库_05

2、启用策略

begin
dbms_fga.enable_policy(
object_schema => 'HR',
object_name   => 'EMPLOYEES',
policy_name   => 'audit_emps_salary',
enable        => true);
end;
/

 在禁用策略之后重新启用策略,会留下审计记录

select employee_id,last_name,salary from hr.employees where department_id=10;
select SQL_TEXT from UNIFIED_AUDIT_TRAIL where object_schema= 'HR';

alpine samba 审计 advocacy审计_SQL_06

3、禁用策略

begin
dbms_fga.disable_policy(
object_schema => 'HR',
object_name   => 'EMPLOYEES',
policy_name   => 'audit_emps_salary');
end;
/

禁用审计策略后没有审计记录

select employee_id,last_name,salary from hr.employees where department_id=10;
select SQL_TEXT from UNIFIED_AUDIT_TRAIL where object_schema= 'HR';

alpine samba 审计 advocacy审计_SQL_07

4、删除策略

begin
dbms_fga.drop_policy(
object_schema => 'HR',
object_name   => 'EMPLOYEES',
policy_name   => 'audit_emps_salary');
end;
/

 5、清理审计记录

begin
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,USE_LAST_ARCH_TIMESTAMP => FALSE);
end;
/

 所有的审计记录都被清理

select SQL_TEXT from UNIFIED_AUDIT_TRAIL where object_schema= 'HR';

alpine samba 审计 advocacy审计_xml_08