设为首页
加入收藏夹

ORACLE入门之数据库安全策略
浏览选项:

  数据库安全性问题一直是围绕着数据库管理员的恶梦,数据库数据的丢失以及数据库被非
法用户的侵入使得数据库管理员身心疲惫不堪。本文围绕数据库的安全性问题提出了一些安全
  数据库安全性问题应包括两个部分:
  一、数据库数据的安全
  它应能确保当数据库系统DownTime时,当数据库数据存储媒体被破坏时以及当数据库用户
  二、数据库系统不被非法用户侵入
  它应尽可能地堵住潜在的各种漏洞,防止非法用户利用它们侵入数据库系统。
  对于数据库数据的安全问题,数据库管理员可以参考有关系统双机热备份功能以及数据库
  以下就数据库系统不被非法用户侵入这个问题作进一步的阐述。
  组和安全性
  在操作系统下建立用户组也是保证数据库安全性的一种有效方法。Oracle程序为了安全性
目的一般分为两类:一类所有的用户都可执行,另一类只DBA可执行。在Unix环境下组设置的
配置文件是/etc/group,关于这个文件如何配置,请参阅Unix的有关手册,以下是
  保证安全性的几种方法:
  (1) 在安装Oracle Server前,创建数据库管理员组(DBA)而且分配root和Oracle软件拥
有者的用户ID给这个组。DBA能执行的程序只有710权限。在安装过程中SQL*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权限,使服务器上所有的用
  (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 通过操作系统对用户身份确认进行集中控制:如果操作系统与数据库用户信息一致,那
  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的存储过程和程序包。


Copyright © 2004 wanxu.com All Rights Reserved