您的位置:寻梦网首页编程乐园Java天地JSP 专辑JSP001 HTML 离线版
Java 天地
JSP001 HTML 离线版
精选文章 >> Oracle 专栏 >> 数据库安全性策略

由 webmaster 发布于: 2001-02-07 14:21

Thumbs up

数据库安全性问题一直是围绕着数据库管理员的恶梦,数据库数据的丢失以及数据库
被非法用户的侵入使得数据库管理员身心疲惫不堪。本文围绕数据库的安全性问题提出了
一些安全性策略,希望对数据库管理员有所帮助,不再夜夜恶梦。

数据库安全性问题应包括两个部分:

一、数据库数据的安全
它应能确保当数据库系统DownTime时,当数据库数据存储媒体被破坏时以及当数据
库用户误操作时,数据库数据信息不至于丢失。

二、数据库系统不被非法用户侵入
它应尽可能地堵住潜在的各种漏洞,防止非法用户利用它们侵入数据库系统。
对于数据库数据的安全问题,数据库管理员可以参考有关系统双机热备份功能以及
数据库的备份和恢复的资料。
以下就数据库系统不被非法用户侵入这个问题作进一步的阐述。
组和安全性
在操作系统下建立用户组也是保证数据库安全性的一种有效方法。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
词组“ora_test_osoper_d”表示组的名字;词组“NONE”表示这个组的密码;数字1
表示这个组的ID;接下来的是这个组的成员。前两行是Oracle服务器角色的例子,使
用test作为sid,osoper和osdba作为Oracle服务器角色的名字。osoper是分配给用户
的缺省角色,osdba带有WITH ADMIN选项。
为了使这些数据库角色起作用,您必须shutdown您的数据库系统,设置Oracle数据库
参数文件initORACLE_SID.ora中os_roles参数为True,然后重新启动您的数据库。如
果您想让这些角色有connect internal权限,运行orapwd为这些角色设置密码。当您
尝试connect internal时,您键入的密码表示了角色所对应的权限。

SQL*DBA命令的安全性
如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权限相关的命令只能分
配给Oracle软件拥有者和DBA组的用户,因为这些命令被授予了特殊的系统权限。
(1) startup
(2) shutdown
(3) connect internal

数据库文件的安全性
Oracle软件的拥有者应该这些数据库文件($ORACLE_HOME/dbs/*.dbf)
设置这些文件的使用权限为0600:文件的拥有者可读可写,同组的和其他组的用户没
有写的权限。
Oracle软件的拥有者应该拥有包含数据库文件的目录,为了增加安全性,建议收回同
组和其他组用户对这些文件的可读权限。

网络安全性
当处理网络安全性时,以下是额外要考虑的几个问题。
(1) 在网络上使用密码
在网上的远端用户可以通过加密或不加密方式键入密码,当您用不加密方式键入密码
时,您的密码很有可能被非法用户截获,导致破坏了系统的安全性。
(2) 网络上的DBA权限控制
您可以通过下列两种方式对网络上的DBA权限进行控制:
A 设置成拒绝远程DBA访问;
B 通过orapwd给DBA设置特殊的密码。

建立安全性策略

系统安全性策略
(1) 管理数据库用户
数据库用户是访问Oracle数据库信息的途径,因此,应该很好地维护管理数据库用户
的安全性。按照数据库系统的大小和管理数据库用户所需的工作量,数据库安全性管
理者可能只是拥有create,alter,或drop数据库用户的一个特殊用户,或者是拥有
这些权限的一组用户,应注意的是,只有那些值得信任的个人才应该有管理数据库用
户的权限。
(2) 用户身份确认
数据库用户可以通过操作系统,网络服务,或数据库进行身份确认,通过主机操作系
统进行用户身份认证的优点有:
A 用户能更快,更方便地联入数据库;
B 通过操作系统对用户身份确认进行集中控制:如果操作系统与数据库用户信息一致,
那么Oracle无须存储和管理用户名以及密码;
C 用户进入数据库和操作系统审计信息一致。
(3) 操作系统安全性
A 数据库管理员必须有create和delete文件的操作系统权限;
B 一般数据库用户不应该有create或delete与数据库相关文件的操作系统权限;
C 如果操作系统能为数据库用户分配角色,那么安全性管理者必须有修改操作系统帐
户安全性区域的操作系统权限。

数据的安全性策略
数据的生考虑应基于数据的重要性。如果数据不是很重要,那么数据的安全性策略可
以稍稍放松一些。然而,如果数据很重要,那么应该有一谨慎的安全性策略,用它来
维护对数据对象访问的有效控制。

用户安全性策略
(1) 一般用户的安全性
A 密码的安全性
如果用户是通过数据库进行用户身份的确认,那么建议使用密码加密的方式
与数据库进行连接。这种方式的设置方法如下:
在客户端的oracle.ini文件中设置ora_encrypt_login数为true;
在服务器端的initORACLE_SID.ora文件中设置dbling_encypt_login参数为true。
B 权限管理
对于那些用户很多,应用程序和数据对象很丰富的数据库,应充分利用“角色”这个
机制所带的方便性对权限进行有效管理。对于复杂的系统环境,“角色”能大大地简
化权限的管理。
(2) 终端用户的安全性
您必须针对终端用户制定安全性策略。例如,对于一个有很多用户的大规模数据库,
安全性管理者可以决定用户组分类,为这些用户组创建用户角色,把所需的权限和应
用程序角色授予每一个用户角色,以及为用户分配相应的用户角色。当处理特殊的应
用要求时,安全性管理者也必须明确地把一些特定的权限要求授予给用户。
您可以使用“角色”对终端用户进行权限管理。

数据库管理者安全性策略
(1) 保护作为sys和system用户的连接
当数据库创建好以后,立即更改有管理权限的sys和system用户的密码,防止非法用户
访问数据库。当作为sys和system用户连入数据库后,用户有强大的权限用各种方式对
数据库进行改动。改动sys和system用户的密码的方法,可参看前面的相关部分。
(2) 保护管理者与数据库的连接
应该只有数据库管理者能用管理权限连入数据库,当以sysdba或startup,shutdown,
和recover或数据库对象(例如create,drop,和delete等)进行没有任何限制的操作。
(3) 使用角色对管理者权限进行管理

应用程序开发者的安全性策略
(1) 应用程序开发者和他们的权限
数据库应用程序开发者是唯一一类需要特殊权限组完成自己工作的数据库用户。开发
者需要诸如create table,create procedure等系统权限,然而,为了限制开发者对
数据库的操作,只应该把一些特定的系统权限授予开发者。
(2) 应用程序开发者的环境
A 程序开发者不应与终端用户竞争数据库资源;
B 用程序开发者不能损害数据库其他应用产品。
(3) free和controlled应用程序开发
应用程序开发者有一下两种权限:
A free development
应用程序开发者允许创建新的模式对象,包括table,index,procedure,package等,
它允许应用程序开发者开发独立于其他对象的应用程序。
B controlled development
应用程序开发者不允许创建新的模式对象。所有需要table,indes procedure等都
由数据库管理者创建,它保证了数据库管理者能完全控制数据空间的使用以及访问
数据库信息的途径。
但有时应用程序开发者也需这两种权限的混和。
(4) 应用程序开发者的角色和权限
数据库安全性管理者能创建角色来管理典型的应用程序开发者的权限要求。
A create系统权限常常授予给应用程序开发者,以到于他们能创建他们自己
的数据对象。
B 数据对象角色几乎不会授予给应用程序开发者使用的角色。
(5) 加强应用程序开发者的空间限制
作为数据库安全性管理者,您应该特别地为每个应用程序开发者设置以下的一些限制:
A 开发者可以创建table或index的表空间;
B 在每一个表空间中,开发者所拥有的空间份额。应用程序管理者的安全性
在有许多数据库应用程序的数据库系统中,您可能需要一应用程序管理者,应用程序
管理者应负责以下的任务:
C 为每一个应用程序创建角色以及管理每一个应用程序的角色;
D 创建和管理数据库应用程序使用的数据对象;
E 需要的话,维护和更新应用程序代码和Oracle的存储过程和程序包。



资料来源: JSP001.com