如何限定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"的错误。

相关推荐
秦时明月之君临天下19 小时前
MySQL purge 参数详解:innodb_purge_threads 与 innodb_purge_batch_size
数据库·mysql·1024程序员节
三垣网安19 小时前
某某大学心理健康教育平台弱口令及SQL注入漏洞
数据库·sql
打工仔折腾 AI19 小时前
AI Agent 工程化实战(二):5 分钟跑通 Deep Agent 并逐层拆解底层链路
java·数据库·人工智能·后端·python·langchain·ai agent 实战
Shaoshing19 小时前
MySQL视图
数据库
这个DBA有点耶20 小时前
测试全绿,上线三周数据没入账——那个95%的兼容度报告,漏掉的是边界
数据库·mysql·架构
1024奇点20 小时前
【仓颉语言入门 · 第二篇 第 15 课】
开发语言·数据库·ide·开源
xuefuhe20 小时前
Oracle Process termination requested /usr/lib/systemd/systemd
oracle
疯狂学习GIS21 小时前
将谷歌地球引擎账号升级为Contributor与Partner层级的方法
java·数据库·人工智能
gf132111121 小时前
python_高德地图驾车时长查询
数据库·python·mysql
时间售卖铺21 小时前
MySQL 日志管理
运维·数据库·mysql·云原生