设为首页 收藏本站
查看: 336|回复: 0

[经验分享] Oracle安全数据系统架构全接触(4)

[复制链接]

尚未签到

发表于 2016-8-7 07:15:12 | 显示全部楼层 |阅读模式
  5. 删除密码文件
  在删除密码文件前,应确保当前运行的各数据库实例的初始化参数REMOTE_LOGIN_PASSWORDFILE皆设置为NONE。在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。
  但是管理员都觉得乏味,因为在管理员中流行一种很简单的加密办法--就是经常,很频繁地修改自己的密码。可是,每次修改都跟打一次仗似的--因为更新程序并不是每个人都愿意做的事情。
  那么有没有什么简单点的办法呢?请往下看:
  模型:Oracle7.3;开发工具:Develope2000。收费系统(在数据库中的名称是SFYY),其Client端分散在市区的数个营业点,通过城域网与主机(小型 机)相连。
  过程:
  ◆在收费小型机Oracle系统的system用户(DBA)下,创建新用户test;


  create user test
  identified by carton
  default tablespace dataspace1
  quota 100K

  ◆对test用户授以权限;


  grant create session to test;
  grant resource to test;

  ◆在test用户下建立一个存储函数mmtranslate,它其实是一个加密程序。下面是一个简单的例子。


  function mmtranslate(m varchar2)
  return varchar2
  as
  i number(2);
  kk varchar2(10);
  begin
  kk:=′′;
  i:=1;
  loop
  if i<=length(m) then
  if instr(′1234567890′,substr(m,i,1),1,1)>0 then
  kk:=kk||chr(100+to_number(substr(m,i,1)));
  elseif instr(‘wxyz‘,substr(m,i,1),1,1)>0 then
  kk:=kk||chr(-8+ascii(substr(m,i,1)));
  else
  kk:=kk||chr(4+ascii(substr(m,i,1)));
  end if;
  else
  exit;
  end if;
  i:=i+1;
  end loop;
  return kk;
  exception
  when others then
  return ′-1′;
  end;

  ◆在test用户下建表mmtest并插入记录


  create table mmtest
  (usnamevarchar2(6),------用户名称
  mimavarchar2(6)------加密前的密码);
  insert into mmtest values( ‘sfyy‘,‘eds2‘);
  commit;

  ◆执行以下语句


  SQL>select mmtranslate(‘eds2‘) from dual;
  MMTRANSLATE(‘EDS2‘)
  ----------------------------------------
  ihwf

  利用DBA权限更改sfyy的密码为上面语句的执行结果:


  alter user sffy
  identified by ihwf; ;

  ◆修改应用程序,对于开发环境是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为您为用户设置的密码。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-254160-1-1.html 上篇帖子: oracle使用descode和START WITH . . . CONNECT BY 下篇帖子: Oracle数据库锁的种类及研究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表