想记录一下登陆数据库密码错误的情况,也就是想知道是否有人在尝试数据库密码

[复制链接]
查看11 | 回复3 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
网上找了一个触发器如下:
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
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’);
endif;
select distinct sid into v_sid from sys.v_$mystat;
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,’Dy Mon dd HH24:MI:SS YYYY’)||
‘ 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;
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
这个触发器倒是起作用,但是我怎么能获得他尝试登陆的用户名呢。因为数据库里有好多用户,不知道它到底是登陆哪个用户的时候密码错误。。用sys_context 获得的currentuser也不对,这个currentuser似乎是这个触发器建立在哪个用户上,得到的就是哪个用户名
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
发现触发器的中少了一个end if;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行