Oracle 数据库限制IP地址连接

516 阅读2分钟

一、基础环境

  操作系统:Windows 或 Linux

  数据库版本:Oracle Database 11.2.0.1.0 及以上版本

二、适用场景

  出于数据安全考虑,有时候需要对连接 Oracle 数据库的客户端 IP 做一些限制,只有白名单中的IP才能访问。不在白名单中的IP地址连接的时候提示:ORA-12537 TNS 连接已关闭。

三、操作步骤

  1、从需要允许连接的客户端远程登录数据库。

  2、查询正在连接的客户端IPv4地址,默认情况下,从 v$session 中不能直接获得客户端 IP地址,但可以在数据库中创建一个追踪客户端 IP 地址的触发器,以 system 用户登录数据库,执行以下代码创建触发器:

create or replace trigger on_logon_trigger after logon on database  
begin  
    dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));  
end;   
/  

  3、查询正在连接Oracle数据库的客户端信息

select username 用户名,program 程序名称,machine 主机名称,client_info IP地址
from v$session  
where username is not null
group by username,program,machine,client_info
order by username,program,machine,client_info

  4、查询结果如下:

用户名称程序名称主机名称IP地址
CZ_DZJKJDBC Thin Clientcspt-app172.3.2.159
CZ_FXBDJDBC Thin Clientcspt-app172.3.2.159
CZ_PLATFORMJDBC Thin Clientcspt-app172.3.2.159
CZ_PLATFORMplsqldev.exeWORKGROUP\CSPT-APP
CZ_SRFXJDBC Thin Clientcspt-app
CZ_SRYCJDBC Thin Clientcspt-app172.3.2.159

  5、在数据库监听配置文件中启用IP检查功能并添加IP地址清单

  修改$ORACLE_HOME/network/admin/sqlnet.ora文件,增加以下内容(#开头的是注释):

# 开启ip限制功能
tcp.validnode_checking=yes
# 允许访问数据库的IP地址列表,多个IP地址使用逗号分开
tcp.invited_nodes=(hostname,127.0.0.1,物理网卡地址,应用服务器地址,其他)
# 禁止访问数据库的IP地址列表,多个IP地址使用逗号分开
# tcp.excluded_nodes=(192.168.1.111)

  6、然后重启监听即可。

  注意事项:

1、第2行必需写,任何平台都可以,但是只适用于TCP/IP。

2、第4行和第6行任写一行即可,如果tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主。

3、不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器。

四、参考资料

www.cnblogs.com/kangxuebin/…