有几种方式来实现这样的功能:
1、 修改SQLNET.ora文件限制访问数据库的IP。
2、 使用触发器实现。
sqlnet.ora文件的功能:
1. Specify the client domain to append to unqualified names
2. Prioritize naming methods
3. Enable logging and tracing features
4. Route connections through specific processes
5. Configure parameters for external naming
6. Configure Oracle Advanced Security
7. Use protocol-specific parameters to restrict access to the database
这里使用的就是sqlnet.ora文件的第七项功能限制访问数据库的连接。
适用版本:oracle 9i以上版本
在9i提供了几个参数:
TCP.EXCLUDED_NODES
设置禁止访问数据库的IP地址列表。
TCP.INVITED_NODES
设置允许访问数据库的IP地址列表,当这个参数和TCP.EXCLUDED_NODES设置的地址相同的时候将覆盖TCP.EXCLUDED_NODES设置。
TCP.VALIDNODE_CHECKING
检测上述参数的设置。
例如:
tcp.validnode_checking=yes
#允许访问的ip
tcp.invited_nodes =(ip1,ip2,……)
#不允许访问的ip
tcp.excluded_nodes=(ip1,ip2,……)
通过这样的设置就可以根据自己的需要更改,
需要注意的问题:
1、 需要设置参数为YES,这样才能激活。
2、 建议设置允许访问的IP,因为IP地址有可能被随意修改,就不能起到自己的目的。
3、 TCP当参数TCP.INVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候将覆盖TCP.EXCLUDED_NODES设置。
4、 需要重启监听器才能生效。
5、 这个方式只是适合TCP协议。
6、 这个配置适用于9i以上版本。在9i之前的版本使用文件protocol.ora。
7、 在服务器上直接连接数据库不受影响。
8、 这种限制方式事通过监听器来限制的。
9、 这个限制只是针对IP检测,对于用户名检测事不支持的。
10、使用触发器
create or replace trigger stop_52_connect
after logon on scott2.schema
declare
ipinfo VARCHAR230);
begin
select sys_context('userenv','ip_address') into ipinfo from dual;
if ipinfo='172.16.0.52' then
raise_application_error('-20001','you can not logon by scott2');
end if;
end stop_52_connect;
阅读(744) | 评论(0) | 转发(0) |