Oracle安全数据系统架构全接触(9)

日期: 2008-06-16 来源:TechTarget中国

  ·修改应用程序,对于开发环境是Develope2000的程序来说,主要是修改主程序的on-lo gon触发器:


  declare


  mm varchar2(6);


  begin


  logon(‘test‘,‘carton‘);


  select mima into mm from mmtest where usname=‘sfyy‘;


  mm:=mmtranslate(mm);


  logout;


  logon(‘sfyy‘,mm);


  end;


  然后再利用触发器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”在盯着你的数据库–因为这里面有他们想要的东西。


 所以,请大家关注好下一个话题:


  §2.不被“hacker”入侵的几个建议


  我们的目标是:没有蛀牙!(开个玩笑~!呵呵)其实应该是:它应尽可能地堵住潜在的各种漏洞,防止非法用户利用它们侵入数据库系统。对于数据库数据的安全问题,数据库管理员可以参考有关系统双机热备份功能以及数据库的备份和恢复的资料。


  以下就数据库系统不被非法用户侵入这个问题作进一步的阐述。


  ·组和安全性:在操作系统下建立用户组也是保证数据库安全性的一种有效方法。Oracle程序为了安全性目的一般分为两类:一类所有的用户都可执行,另一类只DBA可执行。在Unix环境下组设置的配置文件是/etc/group,关于这个文件如何配置,请参阅Unix的有关手册,以下是保证安全性的几种方法:


  (1)在安装Oracle Server前,创建数据库管理员组(DBA)而且分配root和Oracle软件拥有者的用户ID给这个组。DBA能执行的程序只有710权限。在安装过程中SQL*DBA系统权限命令被自动分配给DBA组。


  (2)允许一部分Unix用户有限制地访问Oracle服务器系统,增加一个由授权用户组的Oracle组,确保给Oracle服务器实用例程Oracle组ID,公用的可执行程序,比如SQL*Plus,SQL*forms等,应该可被这组执行,然后该这个实用例程的权限为710,它将允许同组的用户执行,而其他用户不能。


  (3)改那些不会影响数据库安全性的程序的权限为711。(注:在我们的系统中为了安装和调试的方便,Oracle数据库中的两个具有DBA权限的用户Sys和System的缺省密码是manager。为了您数据库系统的安全,我们强烈建议您该掉这两个用户的密码,具体操作如下:


  在SQL*DBA下键入:


  alter user sys indentified by password;


  alter user system indentified by password;


  其中password为您为用户设置的密码。


  ·Oracle服务器实用例程的安全性:


  以下是保护Oracle服务器不被非法用户使用的几条建议:


  (1) 确保$ORACLE_HOME/bin目录下的所有程序的拥有权归Oracle软件拥有者所有;


  (2) 给所有用户实用便程(sqiplus,sqiforms,exp,imp等)711权限,使服务器上所有的用户都可访问Oracle服务器;


  (3) 给所有的DBA实用例程(比如SQL*DBA)700权限。Oracle服务器和Unix组当访问本地的服务时,您可以通过在操作系统下把Oracle服务器的角色映射到Unix的组的方式来使用Unix管理服务器的安全性,这种方法适应于本地访问。


  在Unix中指定Oracle服务器角色的格式如下:


  ora_sid_role[_dla]


  其中 sid 是您Oracle数据库的oracle_sid;


  role 是Oracle服务器中角色的名字;


  d (可选)表示这个角色是缺省值;a (可选)表示这个角色带有WITH ADMIN选项,您只可以把这个角色授予其他角色,不能是其他用户。


  以下是在/etc/group文件中设置的例子:


  ora_test_osoper_d:NONE:1:jim,narry,scott


  ora_test_osdba_a:NONE:3:pat


  ora_test_role1:NONE:4:bob,jane,tom,mary,jim


  bin: NONE:5:root,oracle,dba


  root:NONE:7:root

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐