当前位置:首页 > 心得体会 > win7系统安全策略 基于日志的HIS系统安全策略
 

win7系统安全策略 基于日志的HIS系统安全策略

发布时间:2019-02-21 04:15:05 影响了:

  摘要:针对大型医院管理信息系统(HIS)数据安全的重要性,本文提出基于日志的安全策略。充分发挥Oracle数据库的优势,通过后台有针对性的建立日志系统来实现HIS的安全管理,并给出了解决实例。
  关键词: HIS系统Oracle日志PL/SQL
  中图分类号: 文献标识码:A文章编号:1007-9416(2010)01-0000-00
  A HIS System Security Strategy Based On Log
  ZHAI You-hua
  (The Second Affricated Hospital of Nanjing Medical University, Nanjing 210011)
  Abstract :To target the importance of HIS’s data security, this passage presents a Security Strategy which based on log system. Through the backgroud log system,Bringing into full play the advantage of oracle database, also describes the detail program.
  Keywords :HIS system Oracle Log PL/SQL
  
  1 引言
  HIS系统是医院信息系统的核心,而系统中的数据,更是核心中的核心。数据的安全性关系到整个系统能否正常的运行,并最终关系到医院能否提供正常的服务。所以对整个系统而言,做好数据保护至关重要,它是保证医院提供正常服务的最后一道防线。本院HIS系统除了利用oracle提供的备份恢复工具,在数据库级做好数据备份工作,我们还开发了一套针对用户操作记录,及用户跟踪的安全系统,大大提高了系统的安全性。
  通常的日志系统整合到前台的应用程序中来实现,对用户登陆、修改数据的过程进行记录,同时保存到系统日志表中。目前,常用的系统开发平台.NET、PB、Delphi 和Visual Basic等提供了各种易用的控件,降低了开发人员的开发难度。但是这也使控件对数据的操作变得不完全透明,开发人员很难了解控件对数据的具体操作,从而使这种本来就不方便的日志实现越来越难。
  本文针对设计、开发大型医院管理信息系统过程中应用前台实现安全日志的难度,将安全日志系统移到后台来解决,充分利用Oracle 数据库PL/SQL 的强大优势,建立一套完善的安全日志系统。
  
  2 实现技术
  PL/SQL 是一种高级数据库程序设计语言,代表面向过程化的语言与SQL 语言的结合,专门用于在各种环境下对Oracle 数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL 代码可以对数据进行快速高效的处理,PL/SQL是在SQL语言中扩充了面向过程语言中的程序结构。PL/SQL 语言实现了将过程结构与Oracle SQL的无缝集成,从而为用户提供了一种功能强大的结构化程序设计语言。
  触发器类似于函数和过程,它们都具有声明部分、执行部分和异常处理部分的命名PL/SQL 块。运行触发器的方式叫做激发(Firing) 触发器, 触发事件可以是对数据库表的DML ( Insert、Update 或Delete) 操作或某种视图的操作(View)。Oracle 8i之后把触发器功能扩展到了可以激发系统事件,如数据库的启动和关闭,以及某种DDL操作。
  有三种主要的触发器类型:DML、替代触发器和系统触发器。
  DML 触发器由DML 语句激发,由该语句的类型决定DML 触发器的类型。可以定义DML 触发器进行Insert、Update、Delete 操作。这类触发器可以在上述操作之前或之后激发,除此之外,它们也可以在行或语句操作上激发。
  替代触发器( Instead of trigger) 只能定义在视图上(可以是关系或对象)。与DML触发器不同, DML 触发器是在DML操作之外运行的,而替代触发器则代替激发它的DML语句行。
  Oracle 9i提供了系统触发器。系统触发器可以在两种不同的事件即DDL或数据库上激活。DDL事件包括Create、Alter 或Drop 语句,而数据库事件包括服务器的启动或关闭,用户的登录或退出,以及服务器错误。
  
  3 实现方法
  3.1 用户登陆日志
  当用户登陆或者退出数据库系统时,将触发数据库事件,用户登陆日志就通过基于数据库事件的系统触发器来实现。
  首先要设计一个记录登陆日志的数据表Log_user ,用来保存用户的登陆信息。这个表的结构定义:(表1 数据表Log_user)
  字段 名称 字段类型 是否主键 是否为空
  Id 序列号 Number (14) Y No
  UserId 用户名 Varchar2(30) N No
  Time 时间 date N No
  Operation 操作类型 Varchar2(50) N No
  创建一个序列,自动生成相关的顺序号:
  create sequence Log_sequence
  minvalue 1
  maxvalue 99999999999999
  start with 1
  increment by 1;
  创建程序包,将相关的过程进行封装:
  Create or replace package UserPkg is
  Procedure UserLogin(p_UserID IN Varchar2) ;
  Procedure UserLogout(p_UserID IN Varchar2) ;
  END UserPkg ;
  创建程序包包体,记录相关的信息到登陆日志的数据表中:
  Create or Replace Package BodyUserPkg AS
  Procedure UserLogin(p_UserID IN Varchar2) IS
  Begin --将用户登陆的信息写入到登陆日志的数据表中
  Insert into Log_user (id , userid , time , operation)
  Values (Log_sequence.nextval , p_USerID , SYSDATE , ‘LOGIN’) ;
  End UserLogin
  Procedure UserLogout (p_UserID IN Varchar2)IS
  Begin --将用户退出的信息写入到登陆日志的数据表中
  InsertInto Log_user (id , userid , time , operation)
  Values (Log_sequence.nextval , p_USerID , SYSDATE ,’LOGOUT’) ;
  End UserLogout ;
  End UserPkg ;
  创建触发器,当用户登陆、退出数据库时触发相应的过程:
  Create or Replace Trigger UserLogin --用户登陆时触发
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文   After logon on database
  Call UserPkg.UserLogin(SYS.Login_User);
  Create or Replace Trigger UserLogout--用户退出时触发
  Before Logoff on Database
  Call UserPkg.UserLogout (SYS.Login_User)
  由于UserLogin 和UserLogout 都是系统数据库触发器,创建上述触发器必须具有系统权限Administer Database Trigger。因此还要授予当前创建用户系统权限:
  Grant Administer Database Trigger to UserAdmin ;
  当不同的用户以不同的用户名登陆数据库时,就可以从表Log_user 获得每个用户进入和离开数据库系统的信息。
  3.2 数据表日志
  数据表日志是通过DML 触发器来实现的。DML触发器是由对数据库表进行Insert、Update、Delete 操作而激发的触发器。该类触发器可以在上述操作之前或之后激发运行,也可以按每个变更行激发一次,或每个语句激发一次进行。
  考虑到在实际的医院管理信息系统中,(住院)固定项目表是很重要的。本文就以(住院)固定项目表为例,给出具体的(住院)固定项目表维护日志实现。 表2 是系统(住院)固定项目表。
  表2 (住院)固定项目表(gdxm)
  字段 名称 类型 是否主键 是否为空
  Cwdm 床位代码 Char (8) Y No
  Bqdm 病区代码 Char (8) Y No
  Xmdm 项目代码 Char (8) Y No
  Zxcs 默认次数 Int N No
  Jlzt 记录状态 Ut_bz(用户自定义) N No
  BZ 备注 Varchar2 (50) N No
  表3 (住院)固定项目表的日志表(Log_gdxm)
  字段 名称 类型 是否主键 是否为空
  ID 顺序号 Number(14) Y No
  Xmdm 项目代码 char (8) N No
  UserId 用户名 Varchar2 (30) N No
  Operation 操作类型 Varchar2(50) N No
  Date 操作时间 date N No
  
  首先创建一个序列,自动生成相关的顺序号:
  create sequence gdxm_sequenc
  minvalue 1
  maxvalue 99999999999999
  start with 1
  increment by 1;
  创建程序包,将相关的过程进行封装:
  Create or Replace Package GdxmPkg is
  Procedure GdxmInsert(p_UserID IN Varchar2 ,p_Xmdm IN Char(8));
  Procedure GdxmUpdate(p_UserID IN Varchar2 ,p_Xmdm IN Char(8));
  Procedure GdxmDelete(p_UserID IN Varchar2 ,p_Xmdm IN Char(8));
  END GdxmPkg ;
  创建包体的存储过程,记录相关的信息到物料编码表的日志表中:
  Create or Replace Package Body GdxmPkg AS
  Procedure GdxmInsert(p_UserID In Varchar2 ,p_Xmdm In Char(8)) IS
  BEGIN --将插入数据时的信息写入到日志表
  Insert Into Log_gdxm(id , xmbm , userid , operation , date)
  Values(Gdxm_sequence.Nextval,p_Xmdm,p_UserID,′Insert′,SYSDATE) ;
  END GdxmInsert;
  Procedure GdxmUpdate(p_UserID IN Varchar2 ,p_Xmdm IN Char(8) ) IS
  BEGIN --将更新数据时的信息写入到日志表
  Insert Into Log_gdxm(id , xmbm , userid , operation , date)
  Values(Gdxm_sequence.nextval,p_Xmdm,p_UserID,′Update′,SYSDATE);
  END GdxmUpdate;
  Procedure GdxmDelete(p_UserID IN Varchar2 ,p_Xmdm IN Char(8) ) IS
  BEGIN --将删除数据时的信息写入到日志表
  Insert Into Log_gdxm(id , xmbm , userid , operation , date)
  Values(Gdxm_sequence.nextval , p_Xmbm , p_UserID ,′Delete′, SYSDATE) ;
  END GdxmDelete;
  END GdxmPkg;
  创建触发器,在进行Insert、Update、Delete操作时触发相应的过程:
  Create or Replace Trigger GdxmInsert--插入数据时触发
  After Insert On Gdxm
  For Each ROW
  declare
  P_Xmbm Char(8);
  Begin
  P_Xmbm: = :new.xmbm;
  CALL GdxmPkg.GdxmInsert(SYS.Login_User, p_Xmbm);
  End GdxmInsert ;
  Create or Replace Trigger GdxmUpdate--更新数据时触发
  After Update On Gdxm
  FOR EACH ROW
  declare
  P_gdxm Char(8);
  Begin
  P_gdxm: = :old.gdxm;
  CALL GdxmPkg.GdxmInsert (SYS.Login_User, p_gdxm);
  End GdxmUpdate;
  Create or Replace Trigger GdxmDelete--删除数据时触发
  After Delete On Gdxm
  FOR EACH ROW
  declare
  P_gdxm Char(8)
  Begin
  P_Xmbm: = :old.Xmbm;
  CALL GdxmPkg.GdxmInsert (SYS.Login_User, p_Xmbm);
  End GdxmDelete ;
  当用户对(住院)固定项目表进行Insert、Update、Delete操作时,建立的后台触发器会将用户名、操作的固定编码、操作类型和具体时间记录到日志表中。在数据发生问题时,可以立刻获得对数据误操作的具体操作用户。
  如果在系统中需要对内容进行详细记录,可以扩充日志表,将(住院)固定项目表的相关字段建立到日志表中。在进行Update、Delete 操作时,将(住院)固定项目表的历史信息也保存下来。
  
  4 结语
  按照这套实现方法,能够在数据库后台建立一套完整的日志系统,对用户的登陆信息进行记录,同时也可以对重要的基础数据表建立日志,保证整个系统及后台数据的安全。同时应该指出,数据库后台的资源是有限的,没有必要对所有的表建立日志,特别当数据库本身负荷很重的情况下,会导致系统性能下降。我们医院管理信息系统(HIS)开发过程中,按以上方案建立的日志安全系统运行正常,为系统数据安全提供了有效的保障。
  
  参考文献:
  [1]Ron Hardman.Oracle PL/SQL专家指南:高级PL/SQL解决方案的设计与开发[M].北京:清华大学出版社,2006.
  [2]Scott Urman. Oracle8i PL/SQL 高级程序设计[M].北京:机械工业出版社,2001.
  [3]William G,Page Jr. Oracle 8P8i 开发使用手册[M].北京:机械工业出版社,2000.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3