【方法】如何限定IP访问Oracle数据库

简介:

方法】如何限定IP访问Oracle数据库

 

1.1  BLOG文档结构图

wpsAD16.tmp 

1.2  前言部分

1.2.1  导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~

① 限定IP访问Oracle数据库的3种方法(重点)

② 如何将信息写入到Oracle的告警日志中

③ RAISE_APPLICATION_ERROR不能抛出错误到客户端环境

④ 系统触发器

⑤ 隐含参数:_system_trig_enabled

 


1.3  本文简介

本文详细介绍了3种限制IP地址登录Oracle数据库的办法

1.3.1  本文实验环境介绍

项目

source db

db 类型

RAC

db version

11.2.0.3.0

db 存储

ASM

OS版本及kernel版本

RHEL 6.5

数据库服务器IP地址

192.168.59.130

客户端IP地址

192.168.59.1192.168.59.129

1.4  限定IP访问Oracle数据库的3种办法

1.4.1  利用登录触发器

1.4.1.3  注意事项

需要注意的问题:

① 触发的对象类型可以为DATABASE,也可以为“用户名.SCHEMA”,如:

AFTER LOGON ON DATABASE

AFTER LOGON ON SCOTT.SCHEMA

② 当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TRIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASEDBA角色的用户以及SYSEXFSYS用户将不能通过这种方式限制登录。

③ 隐含参数“_SYSTEM_TRIG_ENABLED的默认值是TRUE,即允许DDL和系统触发器。当设置隐含参数“_SYSTEM_TRIG_ENABLED”为FALSE的时候,将禁用DDL和系统触发器。所以,当该值设置为FALSE的时候将不能通过这种方式限制登录。


1.4.2  利用sqlnet.ora

第二种是修改$ORACLE_HOME/network/admin/sqlnet.ora文件,增加如下内容:

TCP.VALIDNODE_CHECKING=YES  #开启IP限制功能

TCP.INVITED_NODES=(127.0.0.1,IP1,IP2,……)  #允许访问数据库的IP地址列表,多个IP地址使用逗号分开

TCP.EXCLUDED_NODES=(IP1,IP2,……)  #禁止访问数据库的IP地址列表,多个IP地址使用逗号分开

之后重新启动监听器即可这样客户端在登录的时候会报“ORA-12537: TNS:connection closed”的错误。

需要注意的问题:

① 需要设置参数TCP.VALIDNODE_CHECKING为YES才能激活该特性

② 一定要许可或不要禁止数据库服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。

③ 当参数TCP.INVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候TCP.INVITED_NODES的配置为主

④ 修改之后,一定要重起监听才能生效,而不需要重新启动数据库。

⑤ 这个方式只是适合TCP/IP协议。

⑥ 这个配置适用于Oracle 9i以上版本。在Oracle 9i之前的版本使用文件protocol.ora

⑦ 在服务器上直接连接数据库不受影响。

⑧ 这种限制方式通过监听器来限制的。

⑨ 这个限制只是针对IP检测,对于用户名检测不支持的。

 


1.4.3  利用防火墙

3种是修改数据库服务器的IPTABLES配置文件:/etc/sysconfig/iptables来限制某些IP登录数据库服务器。如下:

iptables -I INPUT -s 192.168.59.129 -j DROP

service iptables save

则,192.168.59.129这台主机将不能连接到数据库服务器了,会报“ORA-12170: TNS:Connect timeout occurred”的错误。


该部分可以参考网络配置,小麦苗从网上找了很多。

我们可以通过以下的iptables的设置来限制用户访问oracle所在linux操作系统的安全。

1、清楚操作系统默认的iptables策略

      我本机安装的是centos6.0,安装之后系统会提供iptables默认的policy策略,我们首先要清楚默认的策略

      iptables -F

2、开发221521端口对局域网的某个IP,在本例中客户端ip192.168.1.125,oracle所在机器的IP192.168.1.144,在这里,设置仅有该客户端可以访问221521端口,局域网内的其他IP都不允许访问,

    iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp  --dport 22 -j ACCEPT

    iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp  --dport 1521 -j ACCEPT

    iptables -A INPUT -s 192.168.1.0/24 -p tcp  --dport 22 -j DROP

    iptables -A INPUT -s 192.168.1.0/24 -p tcp  --dport 1521 -j DROP

    这样同一网段内除192.168.1.125之外其他IP都不能访问数据库服务器,即使ping命令也不可以

3、开发221521OUTPUT链给192.168.1.125,否则已经启动的oracle instancepmon进程无法动态注册到1521端口中

     iptables -A OUTPUT -d 192.168.1.125/32 -p tcp  --sport 22 -j ACCEPT

     iptables -A OUTPUT -d 192.168.1.125/32 -p tcp --sport 1521 -j ACCEPT

4、保存当前设置的iptables规则

      service iptables save

      这时系统会将已经设置的规则保存到/etc/sysconfig/iptables文件中

      否则重启之后之前设置的规则都会失效

 

先关闭所有的80端口

开启ip192.168.1.0/24端的80

开启ip211.123.16.123/24ip段的80

# iptables -I INPUT -p tcp --dport 80 -j DROP

# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

# iptables -I INPUT -s 211.123.16.123/24 -p tcp --dport 80 -j ACCEPT

以上是临时设置。

1.先备份iptables

# cp /etc/sysconfig/iptables /var/tmp

2.然后保存iptables

# service iptables save

3.重启防火墙

#service iptables restart

以下是端口,先全部封再开某些的IP

iptables -I INPUT -p tcp --dport 9889 -j DROP

iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 9889 -j ACCEPT

如果用了NAT转发记得配合以下才能生效

iptables -I FORWARD -p tcp --dport 80 -j DROP

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

常用的IPTABLES规则如下:

只能收发邮件,别的都关闭

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -j DROP

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p udp --dport 53 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p tcp --dport 25 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p tcp --dport 110 -j ACCEPT

IPSEC NAT 策略

iptables -I PFWanPriv -d 192.168.100.2 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:80

iptables -t nat -A PREROUTING -p tcp --dport 1723 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp --dport 1723 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp --dport 500 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:500

iptables -t nat -A PREROUTING -p udp --dport 4500 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:4500

 

FTP服务器的NAT

iptables -I PFWanPriv -p tcp --dport 21 -d 192.168.100.200 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 21 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:21

只允许访问指定网址

iptables -A Filter -p udp --dport 53 -j ACCEPT

iptables -A Filter -p tcp --dport 53 -j ACCEPT

iptables -A Filter -d www.3322.org -j ACCEPT

iptables -A Filter -d img.cn99.com -j ACCEPT

iptables -A Filter -j DROP

开放一个IP的一些端口,其它都封闭

iptables -A Filter -p tcp --dport 80 -s 192.168.100.200 -d www.pconline.com.cn -j ACCEPT

iptables -A Filter -p tcp --dport 25 -s 192.168.100.200 -j ACCEPT

iptables -A Filter -p tcp --dport 109 -s 192.168.100.200 -j ACCEPT

iptables -A Filter -p tcp --dport 110 -s 192.168.100.200 -j ACCEPT

iptables -A Filter -p tcp --dport 53 -j ACCEPT

iptables -A Filter -p udp --dport 53 -j ACCEPT

iptables -A Filter -j DROP

多个端口

iptables -A Filter -p tcp -m multiport --destination-port 22,53,80,110 -s 192.168.20.3 -j REJECT

连续端口

iptables -A Filter -p tcp -m multiport --source-port 22,53,80,110 -s 192.168.20.3 -j REJECT iptables -A Filter -p tcp --source-port 2:80 -s 192.168.20.3 -j REJECT

指定时间上网

iptables -A Filter -s 10.10.10.253 -m time --timestart 6:00 --timestop 11:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j DROP

iptables -A Filter -m time --timestart 12:00 --timestop 13:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT

iptables -A Filter -m time --timestart 17:30 --timestop 8:30 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT

禁止多个端口服务

iptables -A Filter -m multiport -p tcp --dport 21,23,80 -j ACCEPT

WAN NATPC

iptables -t nat -A PREROUTING -i $INTERNET_IF -d $INTERNET_ADDR -j DNAT --to-destination 192.168.0.1

 

WAN8000端口NAT19216810020080端口

iptables -t nat -A PREROUTING -p tcp --dport 8000 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:80

MAIL服务器要转的端口

iptables -t nat -A PREROUTING -p tcp --dport 110 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:110

iptables -t nat -A PREROUTING -p tcp --dport 25 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:25

只允许PING 20296134133,别的服务都禁止

iptables -A Filter -p icmp -s 192.168.100.200 -d 202.96.134.133 -j ACCEPT

iptables -A Filter -j DROP

禁用BT配置

iptables –A Filter –p tcp –dport 6000:20000 –j DROP

禁用QQ防火墙配置

iptables -A Filter -p udp --dport ! 53 -j DROP

iptables -A Filter -d 218.17.209.0/24 -j DROP

iptables -A Filter -d 218.18.95.0/24 -j DROP

iptables -A Filter -d 219.133.40.177 -j DROP

基于MAC,只能收发邮件,其它都拒绝

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -j DROP

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -p tcp --dport 25 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -p tcp --dport 110 -j ACCEPT

禁用MSN配置

iptables -A Filter -p udp --dport 9 -j DROP

iptables -A Filter -p tcp --dport 1863 -j DROP

iptables -A Filter -p tcp --dport 80 -d 207.68.178.238 -j DROP

iptables -A Filter -p tcp --dport 80 -d 207.46.110.0/24 -j DROP

只允许PING 20296134133 其它公网IP都不许PING

iptables -A Filter -p icmp -s 192.168.100.200 -d 202.96.134.133 -j ACCEPT

iptables -A Filter -p icmp -j DROP

禁止某个MAC地址访问internet:

iptables -I Filter -m mac --mac-source 00:20:18:8F:72:F8 -j DROP

禁止某个IP地址的PING:

iptables –A Filter –p icmp –s 192.168.0.1 –j DROP

禁止某个IP地址服务:

iptables –A Filter -p tcp -s 192.168.0.1 --dport 80 -j DROP

iptables –A Filter -p udp -s 192.168.0.1 --dport 53 -j DROP

只允许某些服务,其他都拒绝(2条规则)

iptables -A Filter -p tcp -s 192.168.0.1 --dport 1000 -j ACCEPT

iptables -A Filter -j DROP

禁止某个IP地址的某个端口服务

iptables -A Filter -p tcp -s 10.10.10.253 --dport 80 -j ACCEPT

iptables -A Filter -p tcp -s 10.10.10.253 --dport 80 -j DROP

禁止某个MAC地址的某个端口服务

iptables -I Filter -p tcp -m mac --mac-source 00:20:18:8F:72:F8 --dport 80 -j DROP

禁止某个MAC地址访问internet:

iptables -I Filter -m mac --mac-source 00:11:22:33:44:55 -j DROP

禁止某个IP地址的PING:

iptables –A Filter –p icmp –s 192.168.0.1 –j DROP

 

1.5  本文总结

Oracle中,有3种办法可以限定特定IP访问数据库第一种是利用登录触发器如下:

CREATE OR REPLACE TRIGGER CHK_IP_LHR

  AFTER LOGON ON DATABASE

DECLARE

  V_IPADDR    VARCHAR2(30);

  V_LOGONUSER VARCHAR2(60);

BEGIN

  SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS'),

         SYS_CONTEXT('USERENV', 'SESSION_USER')

    INTO V_IPADDR, V_LOGONUSER

    FROM DUAL;

  IF V_IPADDR LIKE ('192.168.59.%') THEN

    RAISE_APPLICATION_ERROR('-20001', 'User '||V_LOGONUSER||' is not allowed to connect from '||V_IPADDR);

  END IF;

END;

/

 

需要注意的问题:

① 触发的对象类型可以为DATABASE,也可以为“用户名.SCHEMA”,如:

AFTER LOGON ON DATABASE

AFTER LOGON ON SCOTT.SCHEMA

② 当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASEDBA角色的用户以及SYSEXFSYS用户将不能通过这种方式限制登录。

③ 隐含参数“_SYSTEM_TRIG_ENABLED的默认值是TRUE,即允许DDL和系统触发器。当设置隐含参数“_SYSTEM_TRIG_ENABLED”为FALSE的时候,将禁用DDL和系统触发器。所以,当该值设置为FALSE的时候将不能通过这种方式限制登录。

第二种是修改$ORACLE_HOME/network/admin/sqlnet.ora文件,增加如下内容:

TCP.VALIDNODE_CHECKING=YES  #开启IP限制功能

TCP.INVITED_NODES=(127.0.0.1,IP1,IP2,……)  #允许访问数据库的IP地址列表,多个IP地址使用逗号分开

TCP.EXCLUDED_NODES=(IP1,IP2,……)  #禁止访问数据库的IP地址列表,多个IP地址使用逗号分开

之后重新启动监听器即可这样客户端在登录的时候会报“ORA-12537: TNS:connection closed”的错误。

需要注意的问题:

① 需要设置参数TCP.VALIDNODE_CHECKING为YES才能激活该特性

② 一定要许可或不要禁止数据库服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。

③ 当参数TCP.INVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候TCP.INVITED_NODES的配置为主

④ 修改之后,一定要重起监听才能生效,而不需要重新启动数据库。

⑤ 这个方式只是适合TCP/IP协议。

⑥ 这个配置适用于Oracle 9i以上版本。在Oracle 9i之前的版本使用文件protocol.ora

⑦ 在服务器上直接连接数据库不受影响。

⑧ 这种限制方式通过监听器来限制的。

⑨ 这个限制只是针对IP检测,对于用户名检测不支持的。

3种是修改数据库服务器的IPTABLES配置文件:/etc/sysconfig/iptables来限制某些IP登录数据库服务器。如下:

iptables -A INPUT -s 192.168.59.1/32 -i eth0 -p tcp  --dport 1521 -j DROP

service iptables save

则,192.168.59.1这台主机将不能通过1521端口连接到数据库服务器了,会报“ORA-12170: TNS:Connect timeout occurred”的错误。

-------------------------------------------------------------------------




     本文转自lhrbest 51CTO博客,原文链接:http://blog.51cto.com/lhrbest/1907972,如需转载请自行联系原作者





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
虚拟化
VMware厚置备延迟置零,厚置备置零,精简置备详解
本文详细介绍VMware厚置备延迟置零,厚置备置零,精简置备的概念及选择使用   1、厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘。
1654 0
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
1290 0
python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
|
7月前
|
监控 Java 调度
《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​
Scheduled是轻量级单机定时任务的便捷选择,而Quartz等框架则为企业级调度需求提供了完整的解决方案。在实际项目中,需根据任务复杂度、集群部署需求、运维成本等因素综合决策。对于Spring Boot应用,若后续可能演进为分布式架构,初期可优先考虑使用XXL-JOB或Elastic Job等云原生友好的调度中间件。
195 0
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏
本文通过详细的代码示例介绍了如何使用JavaScript和HTML5的Canvas API实现一个贪吃蛇游戏,包括蛇的移动、食物的生成、游戏的开始与结束逻辑,以及如何响应键盘事件来控制蛇的方向。
416 1
|
监控 数据可视化 前端开发
基于python django的电商数据分析系统,包括大屏和登录
本文介绍了一个基于Python Django框架开发的电商数据分析系统,该系统具备大屏展示功能和用户登录机制,旨在帮助电商企业实时监控和分析销售数据,支持多维度数据分析和趋势预测。
418 0
基于python django的电商数据分析系统,包括大屏和登录
|
存储 监控 数据处理
Flink⼤状态作业调优实践指南:Datastream 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。
57139 5
Flink⼤状态作业调优实践指南:Datastream 作业篇
|
算法 Python
群智能算法:【WOA】鲸鱼优化算法详细解读
本文详细解读了鲸鱼优化算法(WOA),这是一种受鲸鱼捕食行为启发的新兴群体智能优化算法,具有强大的全局搜索能力和快速收敛速度。文章分为五个部分,分别介绍了引言、算法原理、主要步骤、特点及Python代码实现。通过模拟鲸鱼的捕食行为,该算法能够在复杂的优化问题中找到全局最优解。
|
缓存 NoSQL 关系型数据库
缓存穿透以及解决方案
缓存穿透以及解决方案
159 0
|
小程序 网络协议 物联网
小程序AP配网和AK配网教程(开源)
小程序AP配网和AK配网教程(开源)
1085 0
|
机器学习/深度学习 人工智能 算法
掌握 Copilot:AI编程的未来
掌握 Copilot:AI编程的未来
360 0