下面是实际生产库的一个加固项,是针对于数据库审计。
- 检查是否记录操作日志;检查是否根据业务要求制定数据库审计策略(需要重启数据库)
注意事项及影响:
- 开启审计功能,对于os 级别审计需要部署清理脚本,db 级别审计也需要部署清理脚本
- 对于开启db 级别的审计时,需要迁移审计表到非系统表空间,迁移前truncate sys.aud$ 表
- 该项加固需要重启数据库
序号 | 操作内容 | 操作步骤 | 责任人 | 时间 |
1 | 登陆数据库 | Sqlplus ‘/as sysdba’ |
|
|
2 | 检查数据库状态 | Select open_mode from v$database; |
|
|
3 | 修改审计级别 | 审计级别可以选择os 或者db ,根据需要自己决定 alter system set audit_trail='xxxx' scope=spfile; ---xxxx为DB或OS,建议DB |
|
|
4 | 关闭数据库 | Alter system switch logfile; Alter system checkpoint; Shutdown immediate; |
|
|
5 | 重启数据库 | Startup ; |
|
|
6 | 查看参数 | Show parameter audit ; 查看参数是否已经修改 |
|
|
7 | 清空审计表 | 迁移审计前清空审计表,否则迁移速度可能很慢 Truncate table sys.aud$; |
|
|
8 | 迁移审计日志11g | 将aud$所在的system 表空间迁移到非system 表空间如TBS_DTLDATA:
BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, --this moves table AUD$ audit_trail_location_value => 'TBS_DTLDATA'); --AUD替换为系统中TBS_DTLDATA表空间 END; /
BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD, --this moves table FGA_LOG$ audit_trail_location_value => 'TBS_DTLDATA'); --FGA替换为系统中的TBS_DTLDATA表空间 END; / |
|
|
9 | 迁移审计日志9i,10g | 将aud$所在的system 表空间迁移到非系统表空间如tms: alter table AUDIT$ move tablespace TMS; alter table AUDIT_ACTIONS move tablespace TMS; alter table AUD$ move tablespace TMS; alter table AUD$ move lob(SQLBIND) store as SYS_aud$_sqlbind_0000000384C00040$$ (tablespace TMS); alter table AUD$ move lob(SQLTEXT) store as SYS_aud$_sqltext_0000000384C00041$$ (tablespace TMS); alter index I_AUDIT rebuild online tablespace TMS; alter index I_AUDIT_ACTIONS rebuild online tablespace TMS;
select t.tablespace_name,t.segment_name,t.column_name from dba_lobs t where t.table_name='AUD$';
|
|
|
10 | 对于db级别的审计部署清理脚本 | 清理脚本:
CREATE PROCEDURE P_CLEAR_AUDIT AS
LVC_SQL VARCHAR2(200); BEGIN
LVC_SQL := 'TRUNCATE TABLE SYS.AUD$'; EXECUTE IMMEDIATE LVC_SQL;
END; /
--记得修改执行时间,使用job来定时清理aud$表 DECLARE JOBS INT; BEGIN
SYS.DBMS_JOB.SUBMIT(JOB => JOBS, WHAT => 'P_CLEAR_AUDIT;', NEXT_DATE => TO_DATE('2018-10-21 23:59:00', 'YYYY-MM-DD HH24:MI:SS'), INTERVAL => 'SYSDATE+1'); COMMIT; END; /
SYS.DBMS_JOB.SUBMIT是什么: 用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。 一、dbms_job涉及到的知识点
--查询job 部署情况 COL WHAT FOR A30 COL INTERVAL FOR A30 SET LINES 1000 SELECT JOB,WHAT ,INTERVAL ,T.NEXT_DATE FROM DBA_JOBS T WHERE WHAT LIKE '%AUD%';
|
|
|
11 | 应用测试 | 业务测试是否正常 |
|
|