Part01-基础概念与理论知识
1.1 审计跟踪的概念
审计跟踪是Oracle数据库中存储审计记录的机制,它记录了用户对数据库的操作,包括谁在什么时间执行了什么操作,以及操作的结果。审计跟踪是数据库安全的重要组成部分,可以帮助管理员发现和防止未授权的访问。
学习交流加群风哥QQ113257174
1.2 审计跟踪的类型
- 标准审计跟踪:存储标准审计记录
- 细粒度审计(FGA)跟踪:存储FGA审计记录
- 统一审计跟踪:存储统一审计记录
- 操作系统审计跟踪:存储在操作系统文件中的审计记录
风哥提示:不同类型的审计跟踪存储在不同的位置,需要采用不同的管理策略
1.3 审计跟踪的存储位置
- 数据库审计跟踪:存储在数据库表中(如aud$、fga_log$)
- 操作系统审计跟踪:存储在操作系统文件中(如$ORACLE_BASE/admin/$ORACLE_SID/adump/)
- 统一审计跟踪:存储在统一审计表中
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 审计跟踪管理策略
- 明确审计目标:确定需要审计的操作和对象
- 制定审计记录保留策略:确定审计记录的保留时间
- 定期清理审计记录:避免审计表过大
- 定期归档审计记录:将审计记录归档到外部存储
2.2 审计跟踪性能考虑
在生产环境中,审计跟踪可能会对性能产生影响,建议:
- 只审计必要的操作,避免过度审计
- 合理设置审计记录的存储位置
- 定期清理审计记录,避免审计表过大
- 考虑使用分区表存储审计记录
学习交流加群风哥微信: itpux-com
2.3 审计跟踪存储管理
- 设置适当的审计表空间
- 配置审计记录的保留时间
- 定期归档审计记录
- 监控审计表的大小和增长趋势
更多学习教程公众号风哥教程itpux_com
Part03-生产环境项目实施方案
风哥教程参考Oracle官方文档Security部分,我们将实施以下步骤:
- 配置审计跟踪存储
- 管理审计记录
- 清理审计记录
- 归档审计记录
- 监控审计跟踪
from oracle:www.itpux.com
Part04-生产案例与实战讲解
4.1 配置审计跟踪存储
命令:— 查看审计文件存储位置
SHOW PARAMETER audit_file_dest;– 设置审计文件存储位置
ALTER SYSTEM SET audit_file_dest = ‘/oracle/admin/fgedudb/adump’ SCOPE=SPFILE;– 重启数据库使配置生效
SHUTDOWN IMMEDIATE;STARTUP;执行:输出日志:NAME TYPE VALUE
———————————— ———– ——————————
audit_file_dest string /oracle/admin/fgedudb/adumpSystem altered.Database closed.Database dismounted.ORACLE instance shut down.ORACLE instance started.Database mounted.Database opened.
SHOW PARAMETER audit_file_dest;– 设置审计文件存储位置
ALTER SYSTEM SET audit_file_dest = ‘/oracle/admin/fgedudb/adump’ SCOPE=SPFILE;– 重启数据库使配置生效
SHUTDOWN IMMEDIATE;STARTUP;执行:输出日志:NAME TYPE VALUE
———————————— ———– ——————————
audit_file_dest string /oracle/admin/fgedudb/adumpSystem altered.Database closed.Database dismounted.ORACLE instance shut down.ORACLE instance started.Database mounted.Database opened.
4.2 管理审计记录
命令:— 查看标准审计记录
SELECT username, action_name, object_name, timestamp
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;– 查看FGA审计记录
SELECT object_schema, object_name, policy_name, username, timestamp
FROM dba_fga_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;– 查看统一审计记录
SELECT audit_type, action_name, object_name, username, timestamp
FROM unified_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;执行:输出日志:USERNAME ACTION_NAME OBJECT_NAME TIMESTAMP
—————————— ——————– ——————– ——————-
FGEDU_USER INSERT EMPLOYEES 2026-04-01 13:05:30
FGEDU_USER SELECT EMPLOYEES 2026-04-01 13:05:25
FGEDU_USER LOGON
2026-04-01 13:05:20
SELECT username, action_name, object_name, timestamp
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;– 查看FGA审计记录
SELECT object_schema, object_name, policy_name, username, timestamp
FROM dba_fga_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;– 查看统一审计记录
SELECT audit_type, action_name, object_name, username, timestamp
FROM unified_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;执行:输出日志:USERNAME ACTION_NAME OBJECT_NAME TIMESTAMP
—————————— ——————– ——————– ——————-
FGEDU_USER INSERT EMPLOYEES 2026-04-01 13:05:30
FGEDU_USER SELECT EMPLOYEES 2026-04-01 13:05:25
FGEDU_USER LOGON
2026-04-01 13:05:20
4.3 清理审计记录
命令:— 清理标准审计记录
DELETE FROM aud$ WHERE timestamp < SYSDATE - 30;COMMIT;-- 清理FGA审计记录 DELETE FROM fga_log$ WHERE ntimestamp# < SYSDATE - 30;COMMIT;-- 收缩审计表 ALTER TABLE aud$ ENABLE ROW MOVEMENT;ALTER TABLE aud$ SHRINK SPACE;ALTER TABLE fga_log$ ENABLE ROW MOVEMENT;ALTER TABLE fga_log$ SHRINK SPACE;执行:输出日志:20 rows deleted.Commit complete.5 rows deleted.Commit complete.Table altered.Table altered.Table altered.Table altered.
DELETE FROM aud$ WHERE timestamp < SYSDATE - 30;COMMIT;-- 清理FGA审计记录 DELETE FROM fga_log$ WHERE ntimestamp# < SYSDATE - 30;COMMIT;-- 收缩审计表 ALTER TABLE aud$ ENABLE ROW MOVEMENT;ALTER TABLE aud$ SHRINK SPACE;ALTER TABLE fga_log$ ENABLE ROW MOVEMENT;ALTER TABLE fga_log$ SHRINK SPACE;执行:输出日志:20 rows deleted.Commit complete.5 rows deleted.Commit complete.Table altered.Table altered.Table altered.Table altered.
4.4 使用DBMS_AUDIT_MGMT包管理审计记录
命令:— 初始化审计管理
EXEC DBMS_AUDIT_MGMT.INIT_CLEANUP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 24 /* 小时 */);– 设置审计记录保留时间
EXEC DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
last_archive_time => SYSDATE – 30
);– 清理审计记录
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
use_last_arch_timestamp => TRUE
);执行:输出日志:PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.
EXEC DBMS_AUDIT_MGMT.INIT_CLEANUP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 24 /* 小时 */);– 设置审计记录保留时间
EXEC DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
last_archive_time => SYSDATE – 30
);– 清理审计记录
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
use_last_arch_timestamp => TRUE
);执行:输出日志:PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.
风哥提示:使用DBMS_AUDIT_MGMT包可以更方便地管理审计记录,包括设置保留时间和自动清理
4.5 归档审计记录
命令:— 创建审计归档表
CREATE TABLE fgedu.audit_archive AS
SELECT * FROM dba_audit_trail WHERE 1=0;– 归档审计记录
INSERT INTO fgedu.audit_archive
SELECT * FROM dba_audit_trail WHERE timestamp < SYSDATE - 30;-- 验证归档 SELECT COUNT(*) FROM fgedu.audit_archive;-- 删除已归档的记录 DELETE FROM dba_audit_trail WHERE timestamp < SYSDATE - 30;COMMIT;执行:输出日志:Table created.15 rows created.COUNT(*)
———-
1515 rows deleted.Commit complete.
CREATE TABLE fgedu.audit_archive AS
SELECT * FROM dba_audit_trail WHERE 1=0;– 归档审计记录
INSERT INTO fgedu.audit_archive
SELECT * FROM dba_audit_trail WHERE timestamp < SYSDATE - 30;-- 验证归档 SELECT COUNT(*) FROM fgedu.audit_archive;-- 删除已归档的记录 DELETE FROM dba_audit_trail WHERE timestamp < SYSDATE - 30;COMMIT;执行:输出日志:Table created.15 rows created.COUNT(*)
———-
1515 rows deleted.Commit complete.
4.6 监控审计跟踪
命令:— 监控审计表空间使用情况
SELECT tablespace_name, bytes/1024/1024 “Size (MB)”,
(bytes – free_bytes)/1024/1024 “Used (MB)”,
free_bytes/1024/1024 “Free (MB)”,
ROUND((bytes – free_bytes)/bytes * 100, 2) “Used %”
FROM dba_tablespaces t, (SELECT tablespace_name, SUM(bytes) free_bytes
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE t.tablespace_name = f.tablespace_name(+)
AND t.tablespace_name = ‘SYSAUX’;– 监控审计文件大小
HOST du -sh /oracle/admin/fgedudb/adump/;– 监控审计记录数量
SELECT COUNT(*) FROM dba_audit_trail;SELECT COUNT(*) FROM dba_fga_audit_trail;SELECT COUNT(*) FROM unified_audit_trail;执行:输出日志:TABLESPACE_NAME Size (MB) Used (MB) Free (MB) Used %
—————————— ———- ———- ———- ———-
SYSAUX 1000 350 650 3510M /oracle/admin/fgedudb/adump/COUNT(*)
———-
5
COUNT(*)
———-
2
COUNT(*)
———-
7
SELECT tablespace_name, bytes/1024/1024 “Size (MB)”,
(bytes – free_bytes)/1024/1024 “Used (MB)”,
free_bytes/1024/1024 “Free (MB)”,
ROUND((bytes – free_bytes)/bytes * 100, 2) “Used %”
FROM dba_tablespaces t, (SELECT tablespace_name, SUM(bytes) free_bytes
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE t.tablespace_name = f.tablespace_name(+)
AND t.tablespace_name = ‘SYSAUX’;– 监控审计文件大小
HOST du -sh /oracle/admin/fgedudb/adump/;– 监控审计记录数量
SELECT COUNT(*) FROM dba_audit_trail;SELECT COUNT(*) FROM dba_fga_audit_trail;SELECT COUNT(*) FROM unified_audit_trail;执行:输出日志:TABLESPACE_NAME Size (MB) Used (MB) Free (MB) Used %
—————————— ———- ———- ———- ———-
SYSAUX 1000 350 650 3510M /oracle/admin/fgedudb/adump/COUNT(*)
———-
5
COUNT(*)
———-
2
COUNT(*)
———-
7
更多视频教程www.fgedu.net.cn
Part05-风哥经验总结与分享
5.1 最佳实践
- 制定合理的审计跟踪管理策略
- 定期清理和归档审计记录
- 使用DBMS_AUDIT_MGMT包管理审计记录
- 监控审计跟踪的大小和增长趋势
5.2 常见问题与解决方案
- 问题:审计表空间不足
解决方案:定期清理审计记录,增加表空间大小 - 问题:审计记录过多难以管理
解决方案:使用分区表存储审计记录,定期归档 - 问题:审计影响性能
解决方案:优化审计策略,只审计必要的操作
学习交流加群风哥QQ113257174
5.3 性能优化
- 为审计表创建适当的索引
- 使用分区表存储审计记录
- 配置审计记录的异步写入
- 定期监控审计对性能的影响
更多学习教程公众号风哥教程itpux_com
5.4 安全建议
- 定期备份审计记录,防止审计数据丢失
- 限制对审计记录的访问权限
- 监控审计配置的变更
- 结合其他安全特性,如VPD和数据加密
from oracle:www.itpux.com
