简答题 3.  在Oracle中,如何限定特定IP访问数据库?
【正确答案】总体来说有3种办法可以限定特定IP访问数据库,第一种是利用登录触发器,如下:
   
   需要注意的问题:
   1)触发的对象类型可以为DATABASE,也可以为“用户名.SCHEMA”,如:
   
   2)当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASE和DBA角色的用户以及SYS和EXFSYS用户将不能通过这种方式限制登录。
   3)隐含参数“_SYSTEM_TRIG_ENABLED”的默认值是TRUE,即允许DDL和系统触发器。当设置该隐含参数为FALSE的时候,将禁用DDL和系统触发器。所以,当该值设置为FALSE的时候将不能通过这种方式限制登录。
   第二种是修改$ORACLE_HOME/network/admin/sqlnet.ora文件,增加如下内容:
   
   之后重新启动监听器即可,若禁止访问的IP尝试登录的时候会报“ORA-12537: TNS:connection closed”的错误,从而达到禁止某些IP地址登录数据库的目的。
   需要注意的问题:
   1)需要设置参数TCPVALIDNODE_CHECKING为YES才能激活该特性。
   2)一定要许可或不要禁止数据库服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。
   3)当参数TCPINVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候以TCP.INVITED_NODES的配置为主。
   4)修改之后,一定要重起监听才能生效,而不需要重新启动数据库,
   5)这种方式只适合TCP/IP协议。
   6)这个配置适用于Oracle 9i及其以上版本,在Oracle 9i之前的版本使用文件protocol.ora。
   7)在服务器上直接连接数据库不受影响。
   8)这种限制方式是通过监听器来实现限制的。
   9)这个限制只是针对IP检测,对于用户名检测是不支持的。
   第3种是修改数据库服务器的IPTABLES(配置文件:/etc/sysconfig/iptables)来限制某些IP登录数据库服务器。配置命令如下:
   
【答案解析】