Oracle数据库中的审计功能允许管理员监控和记录对数据库的各种操作。通过配置AUDIT_TRAIL参数,可以控制审计信息的记录方式和存储位置。
AUDIT_TRAIL参数可选值及其含义如下:
- DB/TRUE: 启用系统级审计,审计记录将被写入数据库的审计跟踪表(SYS.AUD$)。需要注意的是,SYSDBA用户的活动不会被记录到该表中。
- OS: 启用系统级审计,审计数据将被写入由AUDIT_FILE_DEST参数指定的目录下的文本文件中,适用于特权用户和普通数据库用户。
- DB,EXTENDED: 类似于DB/TRUE设置,但额外填充了SYS.AUD$表中的SQLTEXT和SQLBIND CLOB列,以包含SQL语句的文本和绑定变量。
- XML: 启用系统级审计,审计数据将以XML格式存储在由AUDIT_FILE_DEST参数指定的目录下。
- XML,EXTENDED: 除了具备XML模式的所有特性外,还会填充SQLBIND和SQLTEXT列。
更改审计配置后,通常需要重启数据库实例才能使设置生效。
SQL> alter system set AUDIT_TRAIL = DB scope=spfile;
SQL> shutdown immediate
SQL> startup
如果审计表AUD$不存在,可以通过运行以下命令手动创建:
SQL> conn / as sysdba
SQL> @?/rdbms/admin/cataudit.sql
为了优化性能或满足特定需求,可能需要将审计表移动到不同的表空间:
alter table AUD$ move tablespace AUD;
alter table aud$ move lob (sqlbind) store as (tablespace AUD);
alter table aud$ move lob (sqltext) store as (tablespace AUD);
对于Oracle 10.2.0.5及以上版本,还可以使用自动段空间管理(ASSM)来管理和压缩审计表:
conn / as sysdba
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
audit_trail_location_value => 'USERS'
);
END;
/
alter table sys.aud$ enable row movement;
alter table sys.aud$ shrink space cascade;
此外,还可以通过脚本将审计表从SYSTEM表空间移出,以减少SYSTEM表空间的压力。在执行此操作前,建议先将audit_trail设置为NONE并重启数据库。
create tablespace "AUDIT"
datafile '$HOME/data/aud01.dbf' size 500k
default storage (initial 100k next 100k pctincrease 0)
/
create table audx tablespace "AUDIT"
storage (initial 50k next 50k pctincrease 0)
as select * from aud$ where 1 = 2
/
rename AUD$ to AUD$$
/
rename audx to aud$
/
create index i_aud2
on aud$(sessionid, ses$tid)
tablespace "AUDIT" storage(initial 50k next 50k pctincrease 0)
/
通过审计功能,可以有效检测潜在的安全威胁,如登录尝试失败等。例如,可以通过以下SQL语句启用对未成功登录尝试的审计:
SQL> AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;
SQL> AUDIT CONNECT BY ACCESS WHENEVER NOT SUCCESSFUL;
一段时间后,可以通过查询AUD$表来检查审计结果,识别可能的攻击行为:
select returncode, action#, userid, userhost, terminal
from aud$
where returncode='1017' and action=100;
此外,还可以通过以下命令快速查看数据库当前的审计配置状态:
show parameter audit
通过AUDIT_TRAIL、AUDIT_FILE_DEST、AUDIT_SYS_OPERATIONS和AUDIT_SYSLOG_LEVEL等参数,可以灵活控制审计数据的记录方式、存储位置和发送目标。同时,可以通过AUDIT语句来指定需要审计的具体操作、权限和对象,从而实现精细化的安全管理。