如何限定IP访问Oracle数据库

在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_DATABASE和DBA角色的用户以及SYS和EXFSYS用户将不能通过这种方式限制登录。

③ 隐含参数"_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"的错误。

相关推荐
Elastic 中国社区官方博客9 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云10 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba10 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭10 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-11 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang11 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu11 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠12 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan12 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长13 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统