前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试839】在Oracle中,如何限定特定IP访问数据库?

【DB笔试面试839】在Oracle中,如何限定特定IP访问数据库?

作者头像
AiDBA宝典
发布2020-07-16 15:10:25
1.4K0
发布2020-07-16 15:10:25
举报
文章被收录于专栏:小麦苗的DB宝专栏

问题

在Oracle中,如何限定特定IP访问数据库?

答案

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

代码语言:javascript
复制
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”,如:

代码语言:javascript
复制
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和系统触发器。当设置该隐含参数为FALSE的时候,将禁用DDL和系统触发器。所以,当该值设置为FALSE的时候将不能通过这种方式限制登录。

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

代码语言:javascript
复制
TCP.VALIDNODE_CHECKING=YES  #开启IP限制功能
TCP.INVITED_NODES=(127.0.0.1,IP1,IP2,……)  #允许访问数据库的IP地址列表,多个IP地址使用逗号分开
TCP.EXCLUDED_NODES=(IP1,IP2,……)  #禁止访问数据库的IP地址列表,多个IP地址使用逗号分开

之后重新启动监听器即可,若禁止访问的IP尝试登录的时候会报“ORA-12537: TNS:connection closed”的错误,从而达到禁止某些IP地址登录数据库的目的。

需要注意的问题:

① 需要设置参数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登录数据库服务器。配置命令如下所示:

代码语言:javascript
复制
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”的错误。

& 说明:

有关限定IP访问数据库的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2135609/。

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档