- 1. 审计top语句
- 2. unified_audit_trail视图中新增event_timestamp_utc列
- 3. TFA和审计
- 4. 为所有审计文件启用syslog和windows事件查看器
- 5. syslog和windows事件查看器中添加PDB_GUID列
- 6. 针对统一审计策略的Vault命令规则
1. 审计top语句
当使用PL/SQL时,对程序的单个调用可能会导致大量的审计操作。为了减少审计日志中记录的数量,我们可以支队顶级语句进行审计。这种情况下使用PL/SQL API,我们只会对该程序的调用进行审计,而不是对程序中执行的所有操作进行审计。
使用授权的用户进行连接,并清空审计记录。如果想要保留当前审计的内容,建议跳过该步骤。
conn sys/SysPassowrd1@localhost:1521/pdb1 as sysdba
exec dbms_audit_mgmt.clean_audit_trail(dbms_audit_mgmt.audit_trail_unified, false);
创建测试用户
-- drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant connect, resource to testuser1;
grant select_catalog_role to testuser1;
创建测试表T1,并创建PL/SQL程序INSERT_T1,来向T1表进行插入操作。这两个对象都是由TESTUSER1所建。
create table testusers1.t1(id number);
create or replace procedure testuser1.insert_t1(p_id in number)
as
begin
insert into t1 values(p_id);
end;
/
创建两个标准审计策略,用于审计testuser1用户的所有操作,但是第二个策略使用了ONLY TOPLEVEL子句。
create audit policy testuser1_pol
actions all
when q'~ sys_context('userenv', 'session_user') = 'TESTUSER1' ~'
evaluate per session;
create audit policy testuser1_toplevel_pol
action all
when q'~ sys_context('userenv', 'session_user') = 'TESTUSER1' ~'
evaluate per session
only toplevel;
当启用第一个策略testuser1_pol时。
audit policy testuser1_pol;
使用testuser1用户连接数据库,并执行insert_t1程序
conn testuser1/testuser1@localhost:1521/pdb1
exec isnert_t1(1);
commit
然后检查标准审计中关于testuser1的信息。我们可以看到里面包含10条审计内容,包含对insert_t1的顶层调用,还有对t1表的插入操作。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
set linesize 200
column event_timestamp format a30
column action_name format a13
column object_schema format a15
column object_name format a25
select event_timestamp,
action_name,
object_schema,
object_name
from unified_audit_trail
where dbusername = 'TESTUSER1'
order by event_timestamp;
EVENT_TIMESTAMP ACTION_NAME OBJECT_SCHEMA OBJECT_NAME
------------------------------ ------------- --------------- -------------------------
09-JAN-22 02.52.41.856739 PM LOGON
09-JAN-22 02.52.41.864478 PM ALTER SESSION
09-JAN-22 02.52.41.870481 PM SELECT SYS DUAL
09-JAN-22 02.52.41.876372 PM EXECUTE SYS DBMS_APPLICATION_INFO
09-JAN-22 02.52.41.881929 PM COMMIT
09-JAN-22 02.52.41.886135 PM COMMIT
09-JAN-22 02.52.41.889243 PM INSERT TESTUSER1 T1
09-JAN-22 02.52.41.890034 PM EXECUTE TESTUSER1 INSERT_T1
09-JAN-22 02.52.41.890959 PM COMMIT
09-JAN-22 02.52.53.693288 PM LOGOFF
10 rows selected.
SQL>
现在我们暂停策略testuser1_pol,然后启用testuser1_toplevel_pol。当然还要清空审计记录。
noaudit policy testuser1_pol;
audit policy testuser1_toplevel_pol;
exec dbms_audit_mgmt.clean_audit_trail(dbms_audit_mgmt.audit_trail_unified,false);
以testuser1连接到数据库,并执行insert_t1程序。
conn testuser1/testuser1@//localhost:1521/pdb1
exec insert_t1(1);
commit;
检查审计记录,发现里面只有8行与testuser1相关的数据,里面有对顶级程序的调用,而没有具体到对t1表的插入。
conn sys/SysPassword1@//localhost:1521/pdb1 as sysdba
set linesize 200
column event_timestamp format a30
column action_name format a13
column object_schema format a15
column object_name format a25
select event_timestamp,
action_name,
object_schema,
object_name
from unified_audit_trail
where dbusername = 'TESTUSER1'
order by event_timestamp;
EVENT_TIMESTAMP ACTION_NAME OBJECT_SCHEMA OBJECT_NAME
------------------------------ ------------- --------------- -------------------------
09-JAN-22 02.56.18.545875 PM LOGON
09-JAN-22 02.56.18.556143 PM SELECT SYS DUAL
09-JAN-22 02.56.18.561399 PM EXECUTE SYS DBMS_APPLICATION_INFO
09-JAN-22 02.56.18.566822 PM COMMIT
09-JAN-22 02.56.18.572013 PM COMMIT
09-JAN-22 02.56.18.575647 PM EXECUTE TESTUSER1 INSERT_T1
09-JAN-22 02.56.18.576603 PM COMMIT
09-JAN-22 02.56.23.354887 PM LOGOFF
8 rows selected.
SQL>
测试完成,禁用并删除审计策略
2. unified_audit_trail视图中新增event_timestamp_utc列
unified_audit_trail视图中新增了event_timestamp_utc列。如果可以的话,应该在对unified_audit_trail的查询的where子句中使用该列,这样能够进行分区裁剪,查询性能更好。
3. TFA和审计
在19c中,TFA(trace file analyzer)支持很多新的SRDC(service request data collections),当然也包括对dbaudit信息的收集,例如
cd $ORACLE_HOME/ahf/oracle.ahf.bin ./tfactl diagcollect -srdc dbaudit
4. 为所有审计文件启用syslog和windows事件查看器
在19c中,部分审计记录可以写入到操作系统日志系统中。两个初始化参数支持该操作:
-
unified_audit_systemlog: 可以应用于单个的容器(CDB或PDB)
-
unified_audit_common_systemlog: 仅限于unix,只能作用于root容器,允许所有容器的通用审计日志
该参数可用的值在不同的os上存在差异
Windows
UNIFIED_AUDIT_SYSTEMLOG = { TRUE | FALSE }
UNIX
UNIFIED_AUDIT_SYSTEMLOG = 'facility_clause.priority_clause'
UNIFIED_AUDIT_COMMON_SYSTEMLOG = 'facility_clause.priority_clause'
facility_clause ::= { USER | LOCAL[ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 ] }
priority_clause::= { NOTICE | INFO | DEBUG | WARNING | ERR | CRIT | ALERT | EMERG }
该功能的文档尚不明确,一些文档的一些章节和其他章节在允许的值和需要使其生效需要完成的配置方面有冲突。我只在以下的设置下使审计功能正常。
为计划记录的内容创建/etc/syslog.conf文件,然后重启syslog
cat >> /etc/rsyslog.conf <<EOF
local0.notice /var/log/local0.notice.audit.log
EOF
systemctl restart syslog
在CDB中设置unified_audit_common_systemlog,并在任意容器中设置unified_audit_systemlog参数
conn / as sysdba
alter system set unified_audit_common_systemlog='local0.notice' scope=spfile;
shutdown immediate;
startup; conn / as sysdba
alter session set container=pdb1;
alter system set unified_audit_systemlog='local0.notice' scope=spfile;
shutdown immediate;
startup;
这样以后,一些审计信息会出现在/var/log/messages和/var/log/local0.notice.audit.log文件中。在写入的时候,似乎不能避免审计日志写到/var/log/message中。这种对上使用,并且包括oracle 19.13和21.4
在windows系统上,可以在任意容器中简单设置unified_audit_systemlog初始化参数,然后重启数据库。
5. syslog和windows事件查看器中添加PDB_GUID列
syslog和windows事件查看器中已经加入了PDB_GUID键。这可以显示具体哪个容器做了审计操作。
syslog和windows事件查看器中可以记录的操作,见这里
6. 针对统一审计策略的Vault命令规则
19c允许为统一审计策略创建Oracle valut命令规则,特别是audit policy和noaudit policy语句
译者碎碎念:unified audit这个特性在12c就已经出现了。oracle已经提供了3三种审计组件了,我个人的理解是audit审计动作,fga审计对象,unified audit类似定制化的审计动作,而且使用更轻量化。