分类: 数据库开发技术
2018-07-11 09:53:01
在数据库管理中,会出现限制某个IP或者IP段访问数据库的需求,那么Oracle如何实现针对DB、单个用户来限制/允许IP访问呢?
1、整个DB层:可设置$ORACLE_HOME/network/admin/sqlnet.ora文件,限制/允许IP访问(不可针对IP段)
2、单个用户:可通过trigger触发器限制/允许某IP或IP段访问。
本文转自-学领未来
测试过程,将192.168.23.20写入到允许列表中
ip:192.168.23.20
ip:192.168.23.100(没有在tcp.invited_nodes参数内设置所以尝试连接报错)
测试两个参数都存在时,tcp.invited_nodes优先
两个参数都把192.168.23.20写进去,还是可以连接到数据库
注意事项:
1) 不支持通配符的使用(如hostname不能写为db0*,IP地址不能写为192.168.23.*)
2) excluded_nodes与invited_nodes为互斥方式,要么使用前者,要么使用后者
3) 如果tcp.invited_nodes与tcp.excluded_nodes都存在,则tcp.invited_nodes优先
4) 要将本地地址,或者Cluster群集其他节点的地址都加入到允许列表,否则监听器可能无法启动
5) 修改之后,一定要重起监听或reload才能生效,而不需要重新启动数据库
6) 仅提供对TCP/IP协议的支持
限制scott用户只能在192.168.23.20 访问数据库服务器
create or replace trigger logon_ip_control
after logon on database
declare
ip STRING(30);
user STRING(30);
begin
SELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip from dual;
if user='SCOTT'
THEN
IF ip not in ('192.168.23.20')
THEN raise_application_error(-20001,'User '||user||' is not allowed to connect from '||ip);
END IF;
END IF;
end;
/
在192.168.23.20 上scott用户可以正常登录到数据库服务器
在192.168.23.100 上scott用户无法登录到数据库服务器
192.168.23.100 上其他用户可以正常登录到该数据库服务器
当然触发器也可以限制某个IP段登录数据库服务器,但只能限制某个用户在某个ip段登录,不能对数据库层面作出限制。
限制10.0.2.%网段访问TEST用户
CREATE OR REPLACE TRIGGER DISABLELOGIN
AFTER LOGON ON TEST.SCHEMA
BEGIN
IF ORA_CLIENT_IP_ADDRESS LIKE ('10.0.2.%') THEN
RAISE_APPLICATION_ERROR(-20001,'USER '||ORA_LOGIN_USER||' IS NOT ALLOWED TO CONNECT FROM '||ORA_CLIENT_IP_ADDRESS);
END IF;
END;
/
限制IP访问是数据库安全加固的事项之一,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段。