简单来说通过在sqlnet.ora文件中设置如下参数来实现
TCP.VALIDNODE_CHECKING控制是否打开数据库访问控制功能。
TCP.EXCLUDED_NODES 黑名单拒绝访问的IP
TCP.INVITED_NODES 白名单允许访问的IP
举例:
TCP.VALIDNODE_CHECKING = YES
TCP.EXCLUDED_NODES= (138.3.33.33)
TCP.INVITED_NODES=(138.4.44.44, hammer)
被拒绝的提示如: ORA-12537: TNS:connection closed
注意:
修改sqlnet.ora文件中的IP列表后都需要重启监听才能生效。
(原文是: Any changes to the values requires the TNS listener to be stopped and restarted.
但通过测试单机情况下lsnrctl reload同样可以生效。
测试11G R2 RAC环境下lsnrctl reload不但不会使得更新内容生效,而且还将已经注册到监听中的服务清掉,导致数据库无法连接。因此rac环境下不能使用lsnrctl reload命令,必须重启监听。
另外,11G R2 RAC上有两种监听,本地监听和SCAN监听,想让控制列表的生效,必须重启对应的监听,如果修改控制列表后,grid用户下(注意11g rac对监听的启停必须用grid用户,无论是lsnrctl还是srvctl) lsnrctl stop - lsnrctl start 来重启了本地监听,那只有通过vip和本地public IP发起的数据库