ORACLE 限制某些IP用户的对重要表的恶意操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 限制某些IP用户的对重要表的恶意操作相关的知识,希望对你有一定的参考价值。

1,问题描述
         Oracle默认账号是没有限制ip的,这样的隐患就在于,如果我知道了oracle账号用户名密码,我只要能连接到db,就可以对db进行操作,这样对于线上的db来说是很危险的,因为有些非dba人员,比如开发人员、测试人员一不小心误删除了线上的数据,就惨了。所以要找一种办法,在一些重要的表上加触发器来限制用户对线上db的表的操作。
 
2,触发器编写
如果开全局的sql审计,消耗性能太大,不太合适,想来只有在某些重要的表上做限制,初步解决问题了。
1)验证ip:(sys_context(‘userenv‘,‘ip_address‘)not in(‘192.168.120.211‘)
2)验证用户名:selects.USERNAME into v_username from v$session s where s.audsid=(selectuserenv(‘SESSIONID‘) from dual) and rownum<2
3)样例存储过程如下:

create or replace trigger  pri_stu_test_limit
 before update or delete or insert on stu.zzz_test
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;    //自治事务。对于定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序    
  v_username varchar2(200) default ‘‘;
BEGIN
 
 select s.USERNAME into v_username from v$session s wheres.audsid=(select userenv(SESSIONID) from dual) and rownum<2;
 
  IF deleting
   AND (sys_context(userenv,ip_address) not in(192.168.120.211) OR stuuser like v_username)
      THEN
       RAISE_APPLICATION_ERROR(-20001, ‘can not delete the table ‘);     //用于在plsql使用程序中自定义不正确消息
                                             语法为:raise_application_error(error_number,message[,[true|false]]);
                                                error_number用于定义不正确号,该不正确号必须在-20000到-20999之间的负整数;
                                                message用于指定不正确消息,并且该消息的长度无法超过2048字节;
                                                第三个参数假如为true,则该不正确会被放在先前不正确堆栈中,假如为false(默认值)则会替代先前所有不正确。
ELSIF inserting AND (sys_context(
userenv,ip_address) not in(192.168.120.211) OR stuuser like v_username)   THEN     RAISE_APPLICATION_ERROR(-20001, can not insert the table ); ELSIF updating AND (sys_context(userenv,ip_address) not in(192.168.120.211) OR stuuser like v_username)   THEN      RAISE_APPLICATION_ERROR(-20001, can not update the table ); END IF; END;

 


4)验证:
SQL>
SQL> insert into stu.zzz_testvalues(3,‘zhuren33‘);
insert into stu.zzz_testvalues(3,‘zhuren33‘)
ORA-20001: can not insert the table
ORA-06512: at"stuuser.PRI_STU_ACCT_LIMIT", line 18
ORA-04088: error during execution oftrigger ‘stuuser.PRI_STU_ACCT_LIMIT‘
SQL> commit;
Commit complete
 
SQL>
SQL> update stu.zzz_test setremark=‘zhuren33_up‘ where id=3;
update stu.zzz_test setremark=‘zhuren33_up‘ where id=3
ORA-20001: can not update the table
ORA-06512: at"stuuser.PRI_STU_ACCT_LIMIT", line 22
ORA-04088: error during execution oftrigger ‘stuuser.PRI_STU_ACCT_LIMIT‘
SQL> commit;
Commit complete
 
SQL>
SQL> delete from  stu.zzz_test where id=3;
delete from stu.zzz_test where id=3
ORA-20001: can not delete the table
ORA-06512: at"stuuser.PRI_STU_ACCT_LIMIT", line 14
ORA-04088: error during execution oftrigger ‘stuuser.PRI_STU_ACCT_LIMIT‘
SQL> commit;
Commit complete
 
SQL>
// OK增删改都可以被限制住了,应该暂时解决了问题。











































以上是关于ORACLE 限制某些IP用户的对重要表的恶意操作的主要内容,如果未能解决你的问题,请参考以下文章

OSSIM5.2.1限制恶意IP扫描或者攻击

nginx限制IP恶意调用接口处理办法

转://因触发器限制导致oracle用户登录失败

在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制

oracle带参数的视图缺点

HBase流量限制和表负载均衡剖析