Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92433687
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-12 13:50:26

   来源:31896    作者:LeeBolin

然后再利用触发器when-new-from-instance执行callfrom或newform等 命令,进入业务处理程序。这个主程序应当仅仅由管理员来掌握,编译之后将执行文件下发 到各收费点的clien端。?

·在system用户下,利用oracle提供的pupbld.sql,建立表productuserprofile,执行下面这样的命令,限制在非开发状态sql命令的使用,例如?

 

insert into productuserprofile?
(product,userid,attribute,charvalue) values?
(‘sql*plus‘,‘test‘,‘connect‘,‘disabled‘);?
insert into productuserprofile?
(product,userid,attribute,charvalue) values?
(‘sql*plus‘,‘sfyy‘,‘delete‘,‘disabled‘);

这样,在sql状态下,根本无法连接到test用户,而在 sfyy用户下,delete命令将不能执行。当然,dba可以改变这些设置。

当然了,这个仅仅是属于一种“应用技巧”,但是足可以把那些每天忙于更新系统的管理员舒服好几天了。但是另一方面,还要加强对源程序的管理,在client端只存放执行程序。加强审计,发现异常现象,及时处理。这样才可以做到更高一层的“安全”。

在下面,我主要是向大家介绍一个rem对ghxxb制立数据库触发子,密码的加密程序。

rem 对ghxxb制立数据库触发子(当insert or update ghxxb时触发)

drop trigger scjmmm; 
create or replace trigger  scjmmm  
before insert or  update of mm  on ghxxb for each row 
begin 
   :new.mm:=encrypt(:new.mm,:new.gh,to_char(sysdate,‘ss‘)); 
end; 
/ 
---------------------------密码的加密程序encrypt---------------------- 
create or replace  
function encrypt (inpass in varchar2,in_gh in varchar2,in_ss in 
varchar2) 
return varchar2 is  
bcs   varchar2(20); 
bcs1  number; 
cs    number; 
jg    number; 
m_gh  varchar2(4); 
m_mm  varchar2(20); 
begin 
m_gh:=in_gh; 
m_mm:=inpass; 
cs:=to_number(in_ss); 
if cs<=1 then cs:=77 ;end if; 
bcs:=substr(to_char(ascii(substr(m_gh,1,1))),1,2); 
if bcs<‘1‘ then bcs:=‘7‘ ;end if; 
m_gh:=substr(m_gh,2); 
loop exit when nvl(length(m_gh),0)=0 ; 
     bcs:=bcs||substr(to_char(ascii(substr(m_gh,1,1))),-1,1); 
     m_gh:=substr(m_gh,2); 
end loop; 
loop exit when nvl(length(m_mm),0)=0 ; 
     bcs:=bcs||substr(to_char(ascii(substr(m_mm,1,1))),-1,1); 
     m_mm:=substr(m_mm,2); 
end loop;    
bcs1:=to_number(bcs);      
jg:=cs*bcs1; 
loop exit when length(to_char(jg))>13; 
     jg:=jg*cs ; 
end loop; 
return(in_ss||substr(to_char(jg),1,14)); 
end; 
/

总结上面的东西,我们仅仅是从自身做起,知道了怎么维护oracle数据库安全这个话题的“皮毛”。可是,对于这个似乎永远也说不完的话题,我们光知道怎么从内部“防御”就够了吗?不要忘了,在外面,还有一群虎视耽耽的“hacker”在盯着你的数据库--因为这里面有他们想要的东西。

阅读(171) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~