转载时请务必以超链接形式标明文章 原始出处和作者信息及本版权声明。
链接:http://www.dbasky.net/archives/2009/03/oracle-5.html
根据应用要求,为规范应用流程,数据库中生产用户只能从特定的主机登陆,禁止非法登陆。根据此要求,设计了一个登陆的trigger,在用户登陆的时候进行检核.
生产用户为XXX,为了减少对其他用户影响,将triger放置在该用户下面.如下:
CREATE OR REPLACE TRIGGER XXX.LOGON_AUDIT
AFTER LOGON ON DATABASE
declare
lv_user varchar2(100);
lv_host varchar2(100);
lv_schema varchar2(100);
lv_suser varchar2(100);
lv_ip varchar2(100);
BEGIN
select sys_context('USERENV', 'HOST'),
sys_context('USERENV', 'CURRENT_USER'),
sys_context('USERENV', 'CURRENT_SCHEMA'),
sys_context('USERENV', 'SESSION_USER'),
sys_context('USERENV', 'IP_ADDRESS')
into lv_host, lv_user, lv_schema, lv_suser, lv_ip
from dual;
if lv_suser = 'XXX' then
--记录正常XXX用户登陆记录
if lv_host = 'zjtesta' or substr(lv_ip, 1, 9) = '192.168.128.101' then
insert into xta6.logon_record
(logon_user, logon_schema, logon_host, ip_address, status)
values
(lv_user, lv_schema, lv_host, lv_ip, 'passed');
else
RAISE_APPLICATION_ERROR(-20001, 'CONNECTIION REFUSED');
end if;
end if;
END;
该trigger能够在用户登陆后,检查登陆信息,连接者必须是zjtesta,或者是192.168.128.101网段的,如果违反规则,则RAISE_APPLICATION_ERROR退出连接。但是,如果USER具有DBA权限后,该RAISE字句将无法作用,切记!!!
经查,原因为,oracle为了防止管理员帐户无法登陆而忽略该RAISE,所以,对具有DBA权限的用户,该审核方式无效,只能通过记录登陆者的信息来稽核,无法终止异常登陆.
发表评论