Oracle 审计管理

附表

user$ 视图解释
Test cases below show:

?CTIME is the date the user was created.
?LTIME is the date the user was last locked. (Note that it doesn't get NULLed when you unlock the user).
?PTIME is the date the password was last changed.
?LCOUNT is the number of failed logins.

记录用户登录失败触发器:
CREATE OR REPLACE TRIGGER logon_denied_to_alert
  AFTER servererror ON DATABASE
DECLARE
  message   VARCHAR2(168);
  ip        VARCHAR2(15);
  v_os_user VARCHAR2(80);
  v_module  VARCHAR2(50);
  v_action  VARCHAR2(50);
  v_pid     VARCHAR2(10);
  v_sid     NUMBER;
  v_program VARCHAR2(48);
BEGIN
  IF (ora_is_servererror(1017)) THEN
 
    -- get ip FOR remote connections :
    IF upper(sys_context('userenv', 'network_protocol')) = 'TCP' THEN
      ip := sys_context('userenv', 'ip_address');
    END IF;
 
    SELECT sid INTO v_sid FROM sys.v_$mystat WHERE rownum < 2;
    SELECT p.spid, v.program
      INTO v_pid, v_program
      FROM v$process p, v$session v
     WHERE p.addr = v.paddr
       AND v.sid = v_sid;
 
    v_os_user := sys_context('userenv', 'os_user');
    dbms_application_info.read_module(v_module, v_action);
 
    message := to_char(SYSDATE, 'YYYYMMDD HH24MISS') ||
               ' logon denied from ' || nvl(ip, 'localhost') || ' ' ||
               v_pid || ' ' || v_os_user || ' with ' || v_program || ' – ' ||
               v_module || ' ' || v_action;
 
    sys.dbms_system.ksdwrt(2, message);
 
  END IF;
END;
/

特别鸣谢:   附表:

查询错误密码的登录者
select username,
os_username,
userhost,
client_id,
trunc(timestamp),
returncode,
count(*) failed_logins
from dba_audit_trail
where returncode=1017 and --1017 is invalid username/password
timestamp < sysdate
group by username,os_username,userhost, client_id,trunc(timestamp),returncode
order by trunc(timestamp) desc ;

Oracle 审计管理

富士康质检员张全蛋

于 2018-10-12 11:12:43 发布

289
 收藏
分类专栏: Oracle 日常管理 文章标签: oracle
版权

Oracle 日常管理
专栏收录该内容
97 篇文章14 订阅
订阅专栏
下面是实际生产库的一个加固项,是针对于数据库审计。

检查是否记录操作日志;检查是否根据业务要求制定数据库审计策略(需要重启数据库)
注意事项及影响:

 开启审计功能,对于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涉及到的知识点
1、创建job:
variable jobno number;
dbms_job.submit(:jobno, —-job号  
                'your_procedure;',—-执行的存储过程, ';'不能省略 
                next_date, —-下次执行时间  
                'interval' —-每次间隔时间,interval以天为单位
); 

--查询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

应用测试

业务测试是否正常


————————————————
版权声明:本文为CSDN博主「富士康质检员张全蛋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34556414/article/details/83024034

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值