审计是监视和和记录所选数据库操作,包括数据库用户和非数据库用户;可调查可疑操作,监控用户行为;审计有强制审计、标准审计、统一审计、混合审计、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说明没有开启统一审计
关闭监听和数据库,开启统一审计后重启监听和数据库,并查看统一审计是否开启
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' ; //查看是否开启了统一审计
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; //查看当前正在使用的审计策略
四、混合审计
是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; //查看审计策略是否创建成功
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'; //查看审计记录
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';
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';
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';