oracle默认不审计任何操作,audit_trail=none;需设db并重启,再用audit命令指定对象与级别,查dba_audit_traail或unified_audit_trail(统一审计启用后)。
oracle审计开关没开,查不到任何访问记录
默认情况下 oracle 完全不记录谁查了哪张表,audit_trail 参数为 none,所有 select、update 等操作都不会留下痕迹。想查访问记录,必须手动开启审计,并明确指定审计对象和级别。
实操建议:
- 先确认当前审计状态:
SHOW PARAMETER AUDIT_TRAIL
—— 若返回VALUE为NONE,审计未启用 - 修改需重启数据库(非
SCOPE=BOTH):ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE;
,然后重启实例 - 重启后执行
AUDIT SELECT ON scott.emp BY ACCESS;才会记录每次查询;用BY SESSION则只记会话首次操作,容易漏记录 - 注意:
DB模式将审计记录写入DBA_AUDIT_TRAIL(即AUD$表),而OS模式写入操作系统文件,后者无法用 SQL 直接查
对已有用户或表批量审计要避免漏项
逐条写 AUDIT SELECT ON user1.table1 容易遗漏,尤其当表多、用户多时。更可靠的方式是生成脚本动态覆盖。
实操建议:
- 查出某用户下所有基表(排除视图、物化视图):
SELECT 'AUDIT SELECT ON ' || owner || '.' || table_name || ' BY ACCESS;' FROM dba_tables WHERE owner = 'SCOTT' AND nested = 'NO';
- 执行结果拼出的语句集,复制运行即可批量开启;别忘了对
INSERT/UPDATE/DELETE做同样处理 - 如果只关心敏感表,用
IN显式列出:AUDIT SELECT, UPDATE ON hr.salaries BY ACCESS;
- 不要依赖
AUDIT ALL ON hr.salaries—— 它不包括SELECT,仅含 DML 和 DDL 操作
查不到记录?重点检查三个地方
开了审计却查不到 DBA_AUDIT_TRAIL 里的数据,大概率是以下三处之一出了问题。
实操建议:
- 确认当前用户有权限查视图:
SELECT * FROM session_privs WHERE privilege = 'SELECT ANY DICTIONARY';
,没有就找 DBA 授权 - 检查时间范围:默认只查最近 24 小时?错——
DBA_AUDIT_TRAIL记录的是实际发生时间,但若归档策略清理了旧记录(如设置了AUDIT_TRAIL_CLEANUP_JOB),历史数据可能已删 - 验证是否真触发了审计:用被审计用户登录,执行一条
SELECT * FROM scott.emp WHERE ROWNUM = 1;,再立刻查DBA_AUDIT_TRAIL,看ACTION_NAME = 'SELECT'是否出现 - 注意:
SYSAUDITOR角色才能查UNIFIED_AUDIT_TRAIL,而传统审计走的是DBA_AUDIT_TRAIL,别混查
统一审计(Unified Audit)和传统审计不能共存于同一查询路径
12c 及以后支持统一审计,但它和传统 AUDIT 命令互不兼容:开了统一审计后,AUDIT SELECT ON ... 语句会报 ORA-01031: insufficient privileges,且 DBA_AUDIT_TRAIL 不再更新。
实操建议:
- 判断是否启用了统一审计:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
返回TRUE即已启用 - 启用统一审计后,必须用
AUDIT POLICY方式,例如:CREATE AUDIT POLICY emp_select_pol ACTIONS SELECT ON scott.emp;<br>AUDIT POLICY emp_select_pol;
- 查记录只能走
UNIFIED_AUDIT_TRAIL:SELECT event_timestamp, dbusername, object_schema, object_name, action_name FROM UNIFIED_AUDIT_TRAIL WHERE object_name = 'EMP';
- 切换审计类型需重建数据库(12c)或至少重启并重编译内核(19c+),线上环境务必提前评估
审计日志本身会持续增长,AUD$ 表或统一审计表空间若满,新记录将被丢弃,这个细节常被忽略。











