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

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

         问题

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


     




         答案          


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

 1CREATE OR REPLACE TRIGGER CHK_IP_LHR
2  AFTER LOGON ON DATABASE
3DECLARE
4  V_IPADDR    VARCHAR2(30);
5  V_LOGONUSER VARCHAR2(60);
6BEGIN
7  SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
8         SYS_CONTEXT('USERENV', 'SESSION_USER')
9    INTO V_IPADDR, V_LOGONUSER
10    FROM DUAL;
11  IF V_IPADDR LIKE ('192.168.59.%') THEN
12    RAISE_APPLICATION_ERROR('-20001', 'User '||V_LOGONUSER||' is not allowed to connect from '||V_IPADDR);
13  END IF;
14END;
15/
     

需要注意的问题:

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

1AFTER LOGON ON DATABASE
2AFTER 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文件,增加如下内容:

1TCP.VALIDNODE_CHECKING=YES  #开启IP限制功能
2TCP.INVITED_NODES=(127.0.0.1,IP1,IP2,……)  #允许访问数据库的IP地址列表,多个IP地址使用逗号分开
3TCP.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登录数据库服务器。配置命令如下所示:

1iptables -A INPUT -s 192.168.59.1/32 -i eth0 -p tcp  --dport 1521 -j DROP
2service iptables save #保存防火墙配置
     

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

& 说明:

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

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


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

DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
 

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

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

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

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● QQ:646634621  QQ群:230161599、618766405

● 微信:lhrbestxh

● 微信公众号:DB宝

● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

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

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。

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

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

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


本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

上一篇:【MOS】 [INS-41112] Specified network interface(文档 ID 1427202.1)


下一篇:R语言爬虫、新闻