暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

巧用Oracle触发器,禁用指定IP登录

数据库驾驶舱 2024-05-20
375

背景

在数据库管理中,安全性是首要考虑因素之一。防止未经授权的访问对保护数据完整性和安全性至关重要。尽管防火墙和网络层安全措施能够阻止大多数未经授权的访问,但有时需要在数据库层面实施更细粒度的控制。Oracle数据库提供了一种方法,通过触发器和IP黑名单机制,进一步加强对用户访问的控制。

本文将介绍如何在Oracle数据库中创建触发器,禁止特定IP地址的用户登录,从而实现黑名单功能。

使用触发器设置IP黑名单

步骤1:创建存储IP黑名单的表

首先,创建一个表,用于存储需要禁止登录的IP地址列表。

CREATE TABLE SYS.ip_blacklist  
   (    IP_ADDRESS VARCHAR2(50),  
        APP_NAME VARCHAR2(300)  
   ) 

向表中插入一些示例IP地址。

INSERT INTO ip_blacklist (ip_address) VALUES ('192.168.1.100'); 
INSERT INTO ip_blacklist (ip_address) VALUES ('10.0.0.1'); 
COMMIT;

步骤2:创建登录触发器

接下来,创建一个登录触发器,在用户尝试登录时检查其IP地址是否在黑名单中。

CREATE OR REPLACE NONEDITIONABLE TRIGGER SYS.trg_blacklist  
after logon on database  
declare  
client_ip varchar2(20);  
v_count varchar2(100);  
begin  
dbms_application_info.set_client_info('logon ' || sys_context('userenv','ip_address')); ----获取客户端信息  
select sys_context('userenv','ip_address'into client_ip from dual;  
----判断ip是否在黑名单上  
select count(1into v_count from ip_blacklist where ip_address = client_ip;  
if v_count>0 then  
raise_application_error(-20000,'该ip已被列入黑名单');  
end if;  
end;  
/  
  
ALTER TRIGGER SYS.trg_blacklist ENABLE; ---启动触发器

该触发器在每次用户登录时触发,获取其IP地址,并检查该IP地址是否在黑名单表中。如果在黑名单中,则抛出一个应用错误,阻止用户登录。

步骤3:测试触发器

为了验证触发器的效果,可以尝试从黑名单中的IP地址登录。

假设我们从IP地址 192.168.1.100
 尝试登录:

如果IP地址在黑名单中,登录尝试将失败,并显示如下错误消息:

ORA-00604: error occurred at recursive SQL level 1 
ORA-20000: 该ip已被列入黑名单

步骤4:管理IP黑名单

管理员可以随时更新IP黑名单表,以添加或移除受限IP地址。例如,要添加一个新的IP地址到黑名单:

INSERT INTO ip_blacklist (ip_address) VALUES ('192.168.1.101'); 
COMMIT;

要从黑名单中移除一个IP地址:

DELETE FROM ip_blacklist WHERE ip_address = '192.168.1.100'
COMMIT;

如果想设置一个白名单,则在触发器那里改成 ip_address <> client_ip

总结

通过使用Oracle触发器和IP黑名单表,我们可以有效地控制用户的访问权限,增强数据库的安全性。此方法提供了额外的一层保护,防止未经授权的IP地址访问数据库。在实际应用中,管理员可以根据需要灵活管理黑名单表,确保数据库系统的安全与稳定。


文章转载自数据库驾驶舱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论