在SQLNET.ora文件中设置以下参数可以实现IP访问限制:
$ pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
$ vi sqlnet.ora
tcp.validnode_checking=yes #确定是否对客户机IP地址进行检查
tcp.invited_nodes=(ip1,ip2......) #列举允许连接的客户机的IP地址,以逗号分隔
tcp.excluded_nodes=(ip1,ip2......) #列举不允许连接的客户机的IP地址,以逗号分隔
设置后需要重启监听: $ lsnrctl reload
在设置这些参数前后可以通过“tnsping 网络连接串”来测试是否可连: $ tnsping orcldb
通过监听器的限制,通常属于轻量级,比在数据库内部通过触发器进行限制效率要高。
需要注意的地方:
1、tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主。 2、一定要许可或不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。 3、修改之后,一定要重起监听才能生效,而不需要重新启动数据库。 4、任何平台都可以,但是只适用于TCP/IP协议。
我机子上的sqlnet.ora内容如下: $ cat sqlnet.ora # sqlnet.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora # Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES)
# wangnc added, 20080925 tcp.validnode_checking=yes tcp.invited_nodes=(172.18.1.171,172.18.1.164,192.168.41.42)
2.禁用操作系统认证方式登录数据库
禁用的方法很简单,仅需在sqlnet.ora配置文件中添加一条“SQLNET.AUTHENTICATION_SERVICES=(NONE)”即可。