阻止特定的ip登陆数据库的2种方法 (轉)

阻止特定的ip登陆数据库的2种方法
===========================================================

方法1:使用系统触发器

方法2:修改监听器参数文件


(window nt平台,oracle 8.1.7下验证通过)
方法1:使用系统触发器
   create or replace trigger sys_trigger_test
     after logon on database  
   begin                                                        
     if sys_context('userenv','ip_address')='200.200.200.35' then
       raise_application_error(-20001,'logon forbidden');                
     end if;                                                                                                           
   end sys_trigger_test;

  用户登陆时的出错提示:

 ERROR:
 ORA-00604: 递归 SQL 层 1 出现错误
 ORA-20001: logon forbidden
 ORA-06512: 在line 3


方法2:修改监听器参数文件
   在$ORACLE_HOME/network/admin/目录下的protocol.ora文件(如果没有该文件则添加)中加入两行:   
    tcp.validnode_checking=yes
    tcp.excluded_nodes=(200.200.200.33)  
   其中tcp.excluded_nodes指的是要阻止的ip地址或机器名
   然后重启监听器即可

注1:oracle 815及以上版本可以使用方法1,在init.ora文件中设置_system_trig_enabled=false,则系统触发器失效
注2:方法1使用灵活,可以阻止登陆的形式很多,比如说特定时间内、用户使用特定程序禁止登陆等 情况,但系统开销较大,同时对某些用户起不到阻止登陆的作用;方法2系统开销小,但功能单一 
注3:对拥有系统权限ADMINISTER DATABASE TRIGGER或sysdbasysoper的用户,方法1无法阻止用户登陆,但触发器仍然会执行,系统缺省拥有ADMINISTER DATABASE TRIGGER权限的role有IMP_FULL_DATABASE、DBA,可以通过视图role_sys_priv,user_sys_priv等等来查询某个用户所拥有的系统权限

posted @   jimeper  阅读(859)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示