数据库用户避开了LOGON_AUDIT触发器

本文介绍了一种通过创建LOGON_AUDIT触发器来防止生产账号从办公网络非法登录的方法,详细解释了触发器的实现原理及在实际应用中遇到的问题与解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了防止从办公网络试用生产账号登陆生产主机非法获取用户信息(因为我们的生产账号是不作审计的,个人账号作审计,因此要避免生产账号从办公网络登陆主机),我们写了个LOGON_AUDIT的触发器,如下:

CREATE OR REPLACE TRIGGER sys.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 = ‘USERNAME’ then 
  if substr(lv_ip, 1,  in (‘xx.xx.xx’) 
  or lv_ip is null 
  then 
  null ; 
  else 
  RAISE_APPLICATION_ERROR(-20001, ‘CONNECTIION REFUSED’||lv_ip); 
  end if; 
  end if; 
  END;

  测试的时候,通过,可是在正式使用中,却发现有的生产主机没有办法拒绝办公网络的登陆.那就查问题呗.

  查来查去,发现似乎应该是权限的问题.在检查,发现凡是不能拒绝办公网络登陆的数据库用户有一个IMP_FULL_DATABASE的角色.这个角色的权限非常的高,仔细检查这个角色的权限,发现其中有一个权限为:ADMINISTER DATABASE TRIGGER,将这个权限从用户上revoke后,登陆就会被拒绝,如果将这个权限授予用户,就会避开系统的LOGON_AUDIT触发器,能继续登陆,问题是找到了,啥时候能重新授权列,只能等待,慢慢的等到系统上线或者例行维护的时候了,这个权限的重新授予风险还是很高的.不过问题找到了就ok.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值