Oracle限制用户只能从指定IP登录某个账号

本文介绍了如何从数据库管理角度确保数据安全,DBA可以通过创建触发器来限制特定数据库账号只能从预设的IP地址登录。示例展示了创建触发器的SQL语句,当尝试使用非授权IP登录时,系统将返回错误信息。该方法不适用于具有DBA权限的用户。

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

从数据库管理的角度出发,为了数据安全,DBA会限制某些数据库账号只有特定的IP才能登陆。

可以使用触发器达到上述目标。

若要实现只允许固定ip使用TRUI账号登陆数据库,可创建一个触发器,SQL语句如下:

简单版:

/* 合法IP
  XX.XX.XX.10
  XX.XX.XX.11
  代码中隐去具体ip信息,用XX代替
  */
CREATE OR REPLACE TRIGGER system.check_ip_addresses
  AFTER logon ON DATABASE
BEGIN
  IF USER IN ('RUI1','RUI2') THEN
    IF sys_context('USERENV','IP_ADDRESS') NOT IN ('XX.XX.XX.10','XX.XX.XX.11') THEN --括号中的ip列表为可连接数据库的IP
      raise_application_error(-20000,'Can not logon in from this IP address (' 
                               ||sys_context('USERENV','IP_ADDRESS') || ')'); ----错误信息可自行编译
    END IF;
  END IF;
END;

验证
使用合法ip可成功登录用户RUI1和RUI2;
使用合法之外的地址登录用户RUI1或RUI2时,有如下错误提示(打码部分为服务器的ip地址):
在这里插入图片描述
注意:有DBA权限的用户不受该trigger的限制

复杂版:

create or replace trigger logon_check_ip
  after logon ON DATABASE
declare

  error1 exception;

  v_ip       varchar2(60) := null;
  v_user     varchar2(60) := null;
  rightowner varchar(1) := null;

BEGIN

  dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
  /* 合法IP
  XX.XX.XX.10
  XX.XX.XX.11
  代码中隐去具体ip信息,用XX代替
  */

  select sys_context('userenv', 'ip_address'),
         SYS_CONTEXT('USERENV', 'CURRENT_USER')
    into v_ip, v_user
    from dual;
  select 'T'
    INTO rightowner
    FROM DUAL
   WHERE v_ip  in (
                  'XX.XX.XX.10',
                  'XX.XX.XX.11'
                  );
    dbms_output.put_line(rightowner);
  if v_user = 'TRUI' AND nvl(rightowner,'T') = 'F' then  
     raise error1;
  end if;

exception

  WHEN error1 THEN
  
    raise_application_error(num => -20001,
                            msg =>nvl(rightowner,'null')|| ' Logon error,permission denied! ');
  when others then 
     raise_application_error(num => -20001,
                            msg => nvl(rightowner,'null')||' Logon error,permission denied! ');
  
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值