Oracle数据库如何查询各Schema的现有审计设置
Oracle Schema级差异化审计配置可行性及查询方法
针对不同Schema配置差异化的Schema级审计策略完全可行,Oracle传统审计、12c之后推出的统一审计都原生支持按Schema粒度设置独立审计规则,不需要全局套用统一审计配置,也是生产环境非常常见的审计配置方式。
前置检查:确认当前数据库的审计模式
首先执行以下语句确认数据库运行的是哪种审计框架,不同框架的配置存储位置不一样:
SELECT value FROM v$parameter WHERE name = 'unified_auditing';
- 返回值为
TRUE:当前启用12c及以上版本默认的统一审计框架 - 返回值为
FALSE:当前运行兼容旧版本的传统审计框架
分框架查询Schema级审计配置
1. 传统审计框架(11g及之前版本默认,12c+兼容)
传统审计实现Schema差异化配置有两种常见方式:一是通过AUDIT xxx BY <用户名>语法给指定Schema对应的用户单独配置语句、权限级审计;二是直接给指定Schema下的所有对象配置对象级审计。对应查询语句如下:
-- 查询针对指定Schema用户单独配置的语句、权限级审计规则 SELECT user_name AS schema_name, audit_option, success, failure FROM dba_stmt_audit_opts WHERE user_name IS NOT NULL AND user_name NOT IN ('SYS','SYSTEM','DBSNMP','AUDSYS') UNION ALL SELECT user_name AS schema_name, privilege, success, failure FROM dba_priv_audit_opts WHERE user_name IS NOT NULL AND user_name NOT IN ('SYS','SYSTEM','DBSNMP','AUDSYS'); -- 查询按Schema维度配置的对象级审计规则 SELECT owner AS schema_name, object_name, object_type, sel, ins, upd, del, exe, alt, aud, com, gra, ind, loc, ren, ref FROM dba_obj_audit_opts WHERE owner NOT IN ('SYS','SYSTEM','DBSNMP','AUDSYS') ORDER BY owner;
规则判定提示:如果上述查询结果中
user_name/owner字段为具体Schema名称,而非空值或ALL USERS,即为该Schema专属的差异化审计配置;值为ALL USERS的是全局通用规则,不属于差异化配置范畴。
2. 统一审计框架(12c及以上版本默认)
统一审计原生支持创建独立审计策略后直接绑定到指定Schema,配置更灵活,查询逻辑更清晰:
-- 查询所有直接绑定到Schema维度的启用状态审计策略 SELECT policy_name, enabled_opt, entity_name AS schema_name FROM audit_unified_enabled_policies WHERE entity_type = 'SCHEMA'; -- 根据上一步查到的策略名,查询每个策略对应的具体审计动作、生效对象 SELECT policy_name, audit_option_type, audit_option, object_schema, object_name, condition_eval_opt FROM audit_unified_policy_actions WHERE policy_name IN ( SELECT policy_name FROM audit_unified_enabled_policies WHERE entity_type = 'SCHEMA' ) ORDER BY policy_name;
注意:查询以上所有系统视图需要DBA角色权限,执行前请确认使用的账号有对应权限。
内容的提问来源于stack exchange,提问作者SeanGaff
相关产品推荐
相关产品推荐

