Oracle数据库应用系统的安全性

时间:2022-09-17 07:28:11

Oracle数据库应用系统的安全性

摘要:从开发应用程序的角度出发,深入理解oracle数据库的安全策略。结合当前的数据加密技术,提出由应用程序开发人员和数据库管理人员共同提高应用系统安全性的新观念,并以提高Oracle数据库应用系统安全性为例加以实现。

关键词:Oracle数据库应用程序安全

中图分类号: G250.74文献标识码:A 文章编号:

在一些较大规模的客户/服务器系统中,许多数据库管理员都会遇到由于应用程序的安全漏洞,导致数据库中数据丢失的问题,这时,数据库管理员除了从备份中恢复数据外别无它法。但是,只要在开发程序时,事先考虑系统的安全问题,便可以提高应用系统的安全性。以往在开发数据库应用程序时,软件的登录界面大多是直接使用数据用户进入程序的,知道数据拥有用户口令的人就越多,这样他们除了通过应用程序连接数据库外,还可以用许多其它的工具连接数据库,近而可以对该用户所拥有的数据做任意的修改、删除等操作,使其中的数据再无安全可言,而系统却认为其是合法的,因为他是以合法身份进入数据库的。尽管经常改变数据库的用户密码是为保障数据库系统安全而经常采用的一个基本办法,可对于那些已经将认证用户和密码写在程序中的应用系统,数据库管理员又不能随意地改动该用户的口令,因为一旦口令发生变化,应用程序的开发人员就要重新改写程序中的相关部分,重新进行编译后再下发给各个推广单位,所有这些工作对于客户端多而分散的应用系统而言,工作量大,实际运作极不方便。针对这一问题,我们提出在开发数据库应用系统时,应结合基础数据库的安全策略,由应用程序开发人员和数据库管理人员来共同提高数据库应用系统的安全性,近而提高数据库的安全性。

1应用技术

1.1数据加密技术

数据加密技术,是为提高信息系统及数据的安全性、保密性和防止秘密数据被破解所采用的主要技术手段之一。随着信息技术的发展,网络安全与信息保密日益引起人们的关注。目前各国除了从法律上、管理上加强数据的安全保护外, 还分别在软件和硬件两方面采取措施,促使数据加密技术和物理防范技术不断发展。按作用不同, 数据加密技术主要分为数据传输、数据存储、数据完整性的鉴别以及密钥管理技术四种。

(1)数据传输加密技术。数据传输加密技术的目的是对传输中的数据流加密, 常用的方法有线路加密和端到端加密两种。前者重在线路上而不考虑信源与信宿, 是对保密信息通过各线路采用不同的加密密钥提供的安全保护。后者指信息由发送端自动加密,并进入TCP/IP数据包回封, 然后作为不可阅读和不可识别的数据穿过互联网, 这些信息一旦到达目的地将被自动重组、解密, 成为可读数据。

(2)数据存储加密技术。此项技术的目的是防止在存储环节上的数据失密, 可分为密文存储和存取控制两种。前者一般是通过加密算法转换、附加密码以及加密模块等方法实现; 后者通过对用户资格及权限加以审查和限制、防止非法用户存取数据或合法用户越权存取数据来实现。

(3)数据完整性鉴别技术。此项技术的目的是对信息的传送、存取、处理人的身份和相关数据内容进行验证, 达到保密的要求。一般包括口令、密钥、身份和数据等项的鉴别。 系统通过对比验证对象输入的特征值是否符合预先设定的参数, 实现对数据的安全保护。

(4)密钥管理技术。为了让数据使用得更方便, 数据加密在许多场合集中表现为密钥的应用, 因此密钥往往是保密与窃密的主要对象。密钥的管理技术包括密钥的产生、分配保存、更换与销毁等各环节上的保密措施。

1.2基础数据库安全机制分析

oracle数据库是支持客户、服务器方式的大型关系数据库系统,它提供了一系列相对较完善的安全机制:

(1)帐户安全(Account Security)。要在数据库中访问数据,就必须访问该数据库的一个帐户。每个帐户必须指定一个口令。口令是在帐户建立的时候设置的,可由数据库管理员或用户自己进行修改。

(2)系统级权限(System-level Privilege)。系统级权限可以建立从系统级权限全集到扩展的基本系统级权限的各类角色。比如,Connect, Resource和DBA就是分别提供给用户,开发者及数据库管理员的标准角色。

(3)对象安全性(Object Security)。用户可以通过授权命令将自己创建的一些权限授予其他用户使用,也可以给其他用户授予对对象授权的权限。例如,可以授予一个用户拥有对本用户表授予查询权限的权限。

2技术实现

虽然oracle数据库提供了较为完善的安全机制,但是如果在开发应用程序时,认为安全只是数据库管理员的责任,而将拥有数据的用户及口令固化在程序中,这样会大大地降低应用系统的安全性,甚至直接威胁到整个数据库的安全,所以,我们可以根据基础数据库本身的安全机制,结合应用程序的自身特点,采用多种办法,即提高数据库及应用系统的安全系数,而又方便应用程序的推广。我单位数据库环境为Oracle,应用程序的开发工具是PB或Delphi等。应用程序客户端的每个节点通过局域网与数据库服务器相连。为了实现提高数据库应用系统安全性的目的,在开发应用程序时,采用了如下的办法:

2.1基于底层数据库的安全机制,在数据库中增建应用程序管理用户

应用程序管理用户只是起管理作用,他只包含用于管理数据用户及口令的管理表,而不包含任何生产数据,在此,采用了数据库安全管理的帐户认证机制和系统级权限机制,具体sql实现为:

(1)创建应用程序管理用户test。由数据库管理员创建基本用户:create user test;identified by test;default tablespace dmgc;quota 100K

(2)对test用户授以系统级权限。grant create session to test;grant resource to test;

(3)在应用程序管理用户下,创建用于管理数据用户的管理表并插入记录。数据用户管理表由两列构成,分别是用户名称和未经过处理的用户口令。create table test;(uname varchar2(6),------用户名称;mima varchar2(6)------加密前的密码);insert into test values( 'dmgc', 'dmgc');commit;

2.2采用算法加密技术,处理数据用户的口令

目前加密技术主要有四种,每种技术又可细分为多种方法,可根据需要选择适当的方式实现。一般,在给用户设置口令时,通常是按某种规律进行选择的,可能是生日、名字缩写或是电话号码等,这是很不安全的,所以我们只要采用一种极为简单的算法,就可以将有规律可循的信息,变成随机的代码,从而降低了口令被破解的可能性。本文在应用程序管理用户下建立一个存储函数mmtranslate,主要是用来对其中存放的数据用户的口令进行处理的。

function mmtranslate(m varchar2)

return varchar2

as

i number(2);

kk varchar2(10);

begin

kk:=′′;

i:=1;

loop

if i

if instr(′1234567890′,substr(m,i,1),1,1)>0 then

kk:=kk||chr(100+to_number(substr(m,i,1)));

elsif 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;

接下来我们对数据用户的口令进行加密处理,进一步提高系统的安全性。我们的具体做法是:

(1)获得加密处理后的口令

SQL>select mmtranslate('dmgc') from dual;

MMTRANSLATE('dmgc')

----------------------------------------

ihwf

(2)利用DBA权限更改数据处理用户的密码为加密处理后的结果:

alter user dmgc

identified by ihwf;

2.3开发编写应用程序系统

现在开发应用程序时,我们在主程序的登录界面logon中,可使用早已设置的应用程序管理用户连接到数据库中,从其中的管理表中找到特定的数据用户和口令,再连接到所要操作的数据用户进行正常的数据处理。

declare

mm varchar2(6);

begin

logon('test','test');

select mima into mm from test where uname='dmgc';

mm:=mmtranslate(mm);

logout;

logon('sfyy',mm);

end;

此时,如果再修改数据用户的口令,已经不用再修改应用程序,而只要应用程序管理用户维护一下用户管理表就行了。另外,因为应用程序管理用户中没有真正的数据,即使有人用其连接到数据库中,也不威胁我们的数据。

2.4进一步加强权限限制,保证应用系统的安全

为了做得更加完美一些,我们在数据库管理员用户下,利用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','dmgc','DELETE','DISABLED');

这样,在SQL状态下,即使知道用户test的口令,也根本无法连接到应用程序管理用户(TEST),因而也就无法查看其中存放的应用程序管理表中的信息。经过这些处理后,在推广应用程序时,客户端使用应用程序管理用户连接数据库,完全屏蔽了数据用户的信息,提高了应用系统的安全性。

3 结束语

解决、提高数据库应用系统安全的方法有很多,其中最主要的是开发人员要有足够的认识。应用程序开发人员是具体业务的执行者,对反映具体业务的数据应承担相应的责任并持有对等的权利,责任和权利应在管理员和计算机系统人员谋划的办法、系统中得到具体的体现,这样数据及管理才有保障;计算机管理人员关键是认清问题的实质,得出严密、细致的实施方法,并为业务人员提供必要的“手段”。在开发应用程序时,还要加强对源程序的管理,尽量在客户端只存放执行程序;同时还要加强对数据库的审计,发现异常现象,及时处理。如果应用程序开发人员能够在开发软件时,认识自己对反映具体业务的数据应承担的责任和权利,认真考虑应用系统和数据库的安全,采用合适的安全措施,不仅给以后的工作带来很大的方便,而且对信息产业会产生深远的影响。应用程序开发人员和计算机管理人都要承担应用系统安全的责任,有责任保证数据安全。

参考文献:

[1] 黄莺.论企业信息门户与企业知识门户[J].情报杂志,200593):55-59.

上一篇:浅析现代企业安全管理的重要性 下一篇:关于电力系统继电保护的探讨