如何利用统一审计跟踪审计Oracle 19C指定Schema的所有DDL操作?
Oracle 19C 审计指定Schema所有DDL操作的统一审计方案
一、确认统一审计已启用
Oracle 19C默认启用统一审计,可通过以下语句验证:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
返回结果为TRUE则表示统一审计已启用;若未启用,需按照Oracle官方文档完成配置(通常需重启数据库)。
二、创建针对指定Schema的DDL审计策略
使用ON SCHEMA关键字可直接覆盖目标Schema下所有现有及未来创建的对象,无需逐个指定表/视图,完美解决新建对象的审计覆盖问题。
创建审计策略
CREATE AUDIT POLICY MYSCHEMA_DDL_AUDIT ACTIONS ALL DDL ON MYSCHEMA;
ALL DDL包含以下核心操作:
- 表:CREATE、ALTER、DROP、TRUNCATE
- 视图:CREATE、ALTER、DROP
- 存储过程/函数/包:CREATE、ALTER(含编译)、DROP
- 其他DDL操作:如创建同义词、序列、触发器等(若需排除特定操作,可参考下文修改策略)
激活审计策略
AUDIT POLICY MYSCHEMA_DDL_AUDIT;
三、自定义审计范围(可选)
若需排除部分DDL操作(例如不审计同义词创建),可修改策略:
ALTER AUDIT POLICY MYSCHEMA_DDL_AUDIT EXCEPTIONS CREATE SYNONYM, DROP SYNONYM ON MYSCHEMA;
四、查询审计结果
通过UNIFIED_AUDIT_TRAIL视图查询审计记录,示例语句:
SELECT EVENT_TIMESTAMP AS 操作时间, DBUSERNAME AS 执行用户, ACTION_NAME AS 操作类型, OBJECT_SCHEMA AS 对象所属Schema, OBJECT_NAME AS 对象名称, SQL_TEXT AS 执行SQL FROM UNIFIED_AUDIT_TRAIL WHERE OBJECT_SCHEMA = 'MYSCHEMA' AND ACTION_TYPE = 'DDL' ORDER BY EVENT_TIMESTAMP DESC;
也可通过指定具体ACTION_NAME来缩小查询范围,例如只看表的TRUNCATE操作:
SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE OBJECT_SCHEMA = 'MYSCHEMA' AND ACTION_NAME = 'TRUNCATE TABLE';
五、权限说明
- 创建/修改审计策略:需拥有
AUDIT_ADMIN角色 - 查询审计记录:需拥有
SELECT ANY DICTIONARY权限或直接授予SELECT ON SYS.UNIFIED_AUDIT_TRAIL权限
内容的提问来源于stack exchange,提问作者nightmare637
相关产品推荐
相关产品推荐

