下面是实际生产库的一个加固项,是针对于数据库审计。
- 检查是否记录操作日志;检查是否根据业务要求制定数据库审计策略(需要重启数据库)
注意事项及影响:
- 开启审计功能,对于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 |
应用测试 |
业务测试是否正常 |
|
|