资源描述
江苏大学学士学位论文
摘要
数据库的安全是数据库系统的生命。作为大量信息的存储系统,数据库系统担负着存储和管理这些信息的任务。系统中的数据为众多的用户所共享,数据的泄漏或毁坏将会给社会财富、个人财富带来巨大损失。因此,如何保证数据库系统的安全性,成为迫切需要解决的重要课题。
本文首先回顾了数据库安全研究的历史、现状,在此基础上对其发展提出了一些看法。随后介绍了数据库安全设计目标、系统管理、安全模型等相关的基本理论,以及Oracle是怎样保护系统安全的。在第四章,研究的是推理通道这一当前数据库安全研究的热点,深入讨论了检测和消除推理通道的技术。
关键词:数据库安全;Oracle;推理通道;
Abstract
Database security is considered as the life of the database system. The database system saved a large number of information, bears responsibility for deposit and management of these information.If datas which are shared by mass users are leaked out or ruined, it will bring terrible losing for social and personal wealth. Therefore, how to ensure the database system security becomes important problem which should be solved urgently.
At first,after reviewing history and status quo of researching database security, we put forward many problems of foreground.Then we introduce some primary theories about database security which includes design object,system manage and security model,and show that how Oracle guards its database.In the forth section,inference channel,the focus of database security,is discussed highly in detection and removal.
Keywords: database security; Oracle;inference channel;
目录
前言 1
第一章 数据库安全研究的历史回顾及现状 2
1.1数据库安全研究历史回顾 2
1.1.1 美国国防部标准 2
1.1.2 中美安全标准比较 3
1.2 数据库安全研究现状 4
第二章 数据库安全系统概述 6
2.1 数据库安全系统的设计目标 6
2.2 数据库的安全策略 6
2.3 数据库安全系统采取的措施 7
2.3.1 身份认证 7
2.3.2 存取控制 8
2.3.3 数据加密 9
2.3.4 审计跟踪和攻击检测 10
2.3.5 系统安全恢复 11
第三章 Oracle数据库安全管理机制剖析 12
3.1 创建及管理用户帐号 12
3.2 基于系统权限、对象权限的授权机制 13
3.3 基于视图的安全管理 13
3.4 基于角色的权限管理 14
3.5 基于审计的安全措施 14
3.6 数据字典与权限跟踪 15
3.7 备份与恢复基本策略 16
3.8 本章小结 17
第四章 推理通道 18
4.1推理通道举例 18
4.1.1 基于查询中敏感数据的推理 18
4.1.2统计数据库的推理问题 19
4.1.3 结合元数据从数据中推理 19
4.2 推理问题的一般特征 21
4.3 处理推理通道的工具和技术 22
4.4 在数据库中检测推理通道 24
4.4.1泄漏监控体系结构 25
4.4.2 泄漏监控器 26
4.4.3 泄漏监控器的实现 28
结论 29
致谢 30
参考文献 31
第 32 页 共 35 页
前言
当今社会被我们称之为信息化的社会,信息在各个地域、各个领域中传递,带来了无限的机遇,同时信息的安全问题也成为了社会关注的焦点。作为大量信息的存储系统,数据库系统担负着存储和管理这些信息的任务,系统中的数据为众多的用户所共享,数据的泄漏或毁坏将会给社会财富、个人财富带来巨大损失。
从某种意义上讲,可以认为数据库的安全是数据库系统的生命。正因为数据库技术的应用和数据库系统的建立领域广泛,涉及到重要的商业利益和要害信息的安全,使得对数据库安全的要求更为突出。数据库的特点和优越性来自其数据共享性,同时数据库安全问题也来源于其数据共享。数据库系统安全机制的目标,就是要求作为保存数据和信息记录的数据库管理系统应提供对信息安全的服务——即在向授权用户提供可靠信息和数据服务的同时,又要拒绝非授权用户对数据的存取访问请求,以保证数据库管理下数据的可用性、完整性和一致性,进而保护数据所有者和使用者的合法权益。因此,如何保证数据库系统的安全性,成为迫切需要解决的重要课题。
第一章 数据库安全研究的历史回顾及现状
1.1数据库安全研究历史回顾
1.1.1 美国国防部标准
人们对数据库安全的研究由来已久。自本世纪70年代初,发达国家即开始重视计算机系统的安全性问题,美国军方率先发起对多级安全数据库管理系统(MLSDBMS)的研究和设计。尤其是到了80年代,出于国家利益和其它原因的考虑,美国空军和国防部等单位更是大力资助这类项目,促进了数据库安全研究的发展。计算机安全界掀起了一阵MLSDBMS研究的热潮,一系列安全需求、特殊问题、系统结构、原型系统得到了充分的研究。
美国国防部(DOD)于1985年正式公布了世界上第一个计算机系统安全性评估标准《可信计算机系统评估标准》(Trusted Computer System Evaluation Criteria,简称TCSEC,即橙皮书),随后DOD又颁布了《可信计算机系统评估标准在数据库管理系统的解释》(Trusted Database management system Interpretation of the trusted computer evaluation criteria,简称TDI,即紫皮书),它将TCSEC扩展到数据库管理系统。
在TCSEC中,对安全系统的评估分成四大类、七个安全级别,即D、C1、C2、B1、B2、B3、A1,其中以A1为最高安全级别,D为最低安全级别(如表1)。可靠的计算机系统评估准则的层次与级别如下:
(1)D级:最小保护(最低级别)。一切不符合更高标准的系统都归于D级。属于D层的系统是不安全的,这些系统除了物理上的安全措施外,没有其它什么安全性可言。如DOS就是操作系统中安全标准为D级的典型例子。
(2)C1级:自主安全保护。能够实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播。每个用户对属于他们自己的客体具有控制权。
(3)C2级:受控制的存取保护。将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离。Oracle9i数据库系统被归为C2级系统,这一级别增加了审计及验证机制。审计建立涉及到安全性事件的记录,系统管理员可配置审计系统使其记录下更多的事件,审计同时引发了验证的必要性,同时也占用了系统资源。
(4)B1级:带标记的安全保护。B1级是第一个可以支持多个安全密级的级别,对系统的数据加以标记,并对标记的主体和客体实施强制存取(MAC)以及审计等安全机制。在强制性存取控制下的客体的存取权限是不可以由文件的属主来改变的。这一级别的产品才被认为是真正意义上的安全产品。
(5)B2级:结构化保护。建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC。经过认证的B2级以上的安全系统非常少。
(6)B3级:安全域。该级的TCB必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程。
(7)A1级:验证设计。提供B3级保护的同时给出系统的形式化设计说明和验证以确信各安全保护真正实现。
可以看出支持自主存取控制的DBMS大致属于C级,而支持强制存取控制的DBMS则可以达到B1级。B2级以上的系统标准更多地还处于理论研究阶段。
TDI是TCSEC在数据库管理系统方面的扩充和解释。TDI不能独立成为一个标准,需要联合TCSEC作为参照,TCSEC中各个安全级别的安全性是积聚性的,即较高安全级具有所有较低安全级的安全性能。
TDI沿用了TCSEC的做法,从以下四个方面来描述安全等级的划分标准;安全策略、责任、保证和文档。每大项又分为若干子项,各安全等级的安全特性归纳如表2所示:
说明:相邻两级之间随着级别升高,安全指标可能从无到有,以N(New)表示;或相同,以S(Same)表示;或有改动,以C(Change)表示;或有新增加的内容,以A(Add)表示。
TCSEC/ TDI中的一个主要概念是TCB(Trusted Computing Base,即可信计算基础),它是计算机系统中保护机制的全部。计算机系统的安全完全依赖于实施安全策略可信的软件、硬件和负责系统安全管理的人员,这些就构成了可信计算基础。
1.1.2 中美安全标准比较
我国政府于1999年颁布了信息系统安全评估标准,该标准将信息安全划分成五级标准,如表3。
美国安全等级
中国安全等级
主要特征
最低保护级
D
无安全保护
自主保护级
C1
用户自主保护级
一
主体分离;身份鉴别;数据安全性;自主访问控制
C2
系统审计保护级
二
比C1更强的自主存取控制;审计功能
强制保护级
B1
安全标记保护级
三
标记及强制访问控制
B2
结构验证保护级
四
形式化安全;隐蔽通道约束
B3
访问验证保护级
五
访问监控器
验证保护级
A
形式化安全验证; 隐蔽通道分析
表3 中美计算机系统安全标准对比
在这里将我国的安全标准与前面的美国安全标准比较一下,可以看出我国的安全标准整体参考了美国标准:除去无任何安全保护的D级和尚无产品的A级安全标准,两者基本相同。
1.2 数据库安全研究现状
当前数据库安全研究主要集中在多级安全数据库、推理通道、隐藏通道、角色控制、分布式数据库安全等几个方向上,本文中我们只涉及多级安全数据库和推理通道。
(1)多级安全数据库的语义。
多级安全数据库系统是指数据按其敏感程度被划分为不同的等级,如非密(Unclassified)、秘密(Condential)、机密(Secret)、绝密(Top secret)等;用户也被指定在不同的安全等级上,并按照系统规定的安全策略对不同安全等级上的数据进行存取和共享(如L级的用户仅能读取L级上或L级以下等级上的数据;L级的用户仅能修改L级上的数据)。
多实例(Polyinstation)是多级系统不可避免的内在问题。这是由于强制安全的特点,完全有可能存在多个客体(元素、元组以及表)——这种同时存在性称为多实例——除了其密级不同之外,它们在某些本质特征方面时相同的。多实例关系是指多个具有同名但不同密级的关系。多实例元组指多个具有相同的主键、但密级不同的元组。多实例元素指存在某个元组的某个属性具有不同密级的多个值。
多实例对数据模型甚至系统设计的影响,是需要有一种对多版本数据区分访问的机制,因为具有某个存取级的用户应该只能看到他应该看的版本。多实例性存在于任何多级系统中,不过它对多级安全数据库系统的影响看来是最大的,因为它影响到数据库的数据模型。例如,要实现元素的安全标识,就需要支持多实例元素,这就要求要么抛弃关系数据库中元素的原子性限制,要么把它转换为多实例元组;如果是后者,就必须抛弃关系数据库中的规定“主键要唯一”的前提。无论使用何种方法,都会使得系统设计复杂化。
若不考虑多级安全数据的语义,多实例将会带来数据库中数据语义的二义性从而导致查询结果的二义性,而且元组的更新可能导致关系规模的急剧增长。所谓关系规模的急剧增长指在强制安全策略下,多级关系中元组的更新可能导致其元组个数以密级数的指数级规模增长。所谓语义二义性指一个多级安全关系并不总是只有一个语义解释。查询的二义性指由于语义的二义性造成的不同的查询路径会得出不同的结果。
对此,人们提出了多级关系数据库的模型论语义。即从解释的角度出发,定义一个多级关系数据库的解释是一组通常意义下的关系数据库的集合,这些通常意义下的关系数据库具有相同的模式。对于不同存取级的主体,其理念(Belief)就是与该存取级对应的一个解释。从表面上看,这种方法有点像是数据库级的标识技术,但事实上并非如此,因为具有存取级L的主体看到的数据库表示了L级主体对现实世界中相关事物的认识,但该理念可能含有更低存取级的主体的理念中的数据。尽管提出了一个较完美的基于模型论语义的形式化查询语言,或者说,安全关系代数查询语言,但不得不承认该思想的假设前提未免过于苛刻:
<1>具有相同存取级的主体看到的现实世界的当前状态是一致的。但在现实中,可能需要允许相同存取级的主体看到不完全一样多的信息。
<2>完整性的约束和强制安全策略的一致性:事实上两者几乎总是有冲突的,如完整性约束导致的隐蔽推理通道问题。
看来多级关系远非传统的关系加上密级标识,因为它们至少会产生多实例数据,而多实例数据反过来又影响完整性约束、查询处理和数据库更新。
多级安全数据库不是本文的重点,只是在讨论推理通道问题时有所涉及。
(2)推理通道。
推理就是根据低密级的数据和模式的完整性约束而推导出高密级的数据的存在。可见,这种信息泄漏并非来自直接对安全机制的攻击,而是来自信息本身的特性和语义。基于强制安全策略的系统可以防止低存取级的用户读到高密级的数据,但不能防止他们基于语义和应用来推导高密级的数据。
推理通道将在第三节中重点讨论。
第二章 数据库安全系统概述
2.1 数据库安全系统的设计目标
相对于其他的计算机系统,数据库系统具有以下特点:客体较多;数据生存期长,对维护的要求高;涉及到信息在不同粒度的安全,即客体具有层次性和多项性;在DBMS中受保护的客体可能是复杂的逻辑结构,若干复杂的逻辑结构可能映射到同一物理数据客体上,即客体逻辑结构与物理结构的分离;数据库的安全与数据语法有关;应考虑到推理攻击针对上述数据库系统的基本特点。
在安全的数据库中,既要保证授权的合法用户对数据的有效存取,又能严格拒绝非法用户的攻击企图。因此,数据库安全系统的设计目标包含以下三项:
(1)数据的完整性。
数据的完整性指数据的正确性、一致性和相容性。系统只允许授权的合法用户存取数据库中的数据信息,并且以不破坏数据的完整性为前提;同时,系统应该杜绝非法用户对数据信息进行任何存取操作。由于多个程序并发存取同一个数据库中的数据,可能会造成数据的不一致性。所以安全系统要具有保证数据一致性的功能。
(2)数据的可用性。
当系统授权的合法用户申请存取有权存取的数据时,安全系统应该尽量减小对合法操作的影响。换句话说,采用的安全机制不能明显降低数据库系统的操作性能。
(3)数据的保密性。
安全系统应该提供一个高强度的加密方案,对数据库中的机敏数据进行加密处理。只有当系统的合法用户访问有权访问的数据时,系统才把相应的数据进行解密操作;否则,系统应保持机敏数据的加密状态,以防止非法用户窃取到明文信息,对系统进行攻击。
2.2 数据库的安全策略
数据库的安全策略是指导信息安全的高级准则,即管理、保护和传递敏感信息的法律、规章及方法的集合。数据库的安全问题主要是存取控制策略。就访问控制策略而言,它有以下几种:
(1)知需策略。只让用户得到相应权限的信息,这些信息恰好可以让用户完成自己的工作,其余的权利一律不给。
(2)最大程度共享策略。使数据库中尽可能多的信息能在最大程度上共享。
(3)按实际要求决策颗粒大小策略。按要求将数据库中的项分成大小不同的颗粒,颗粒越小,安全级别越高。通常要根据实际要求决定颗粒大小尺寸。
(4)按内容存取控制策略。这里的“内容”主要是指存储在数据库中的数值。存取控制是根据此时刻的数据值来进行的。
(5)按存取类型控制策略。规定用户对数据可以做出何种类型的存取,如读、写、修改、插入、删除等。
(6)根据历史的存取控制策略。有些数据本身不会泄露秘密,但当与用户以前得到的数据结合起来就有可能推断出受保护的秘密信息,利用推理来获取秘密信息,对数据库的安全保密是一种极大的威胁。该策略记住了用户过去存取的历史,根据过去已经执行的存取来控制它们现在提出的请求。
2.3 数据库安全系统采取的措施
在一般的计算机系统中,安全措施是一级一级设置的,如图1:
图1 计算机系统安全模型
在图示的安全模型中,用户要求进入计算机系统时,系统首先根据输入的用户标识进行身份鉴定,只有合法的用户才准许进入计算机系统。对已进入系统的用户,DBMS还要进行存取控制,只允许用户执行合法操作。操作系统一级也会有自己的安全保护措施。数据最后还可以以密码形式存储到数据库中。操作系统一级的安全保护措施不再详叙。
借鉴了计算机安全系统,我们认为:为保护数据库的安全,从数据库管理系统的角度考虑,安全系统至少应当包括身份认证、存取控制、数据加密、审计跟踪与攻击检测、系统恢复等功能。
2.3.1 身份认证
在开放共享的多用户系统环境下,数据库系统必须要求用户进行身份认证。可以说,用户身份认证是安全系统防止非法用户侵入的第一道安全防线。它的目的是识别系统授权的合法用户,防止非法用户访问数据库系统。用户要登录系统时,必须向系统提供用户标识和鉴别信息,以供安全系统识别认证。
目前,身份认证采用的最常用、最方便的方法是设置口令法。在设置口令的方法中,系统给每个合法用户分配一个唯一的User ID和Password。但是,由于Password的先天不足,其可靠程度极差,容易被他人猜出或测得。因此,有必要设计更复杂的方法,例如每个用户都预先约好一个计算过程或者函数,鉴别用户身份时,系统提供一个随机数,用户根据自己预先约定的计算过程或者函数进行计算,系统根据用户计算结果是否正确进一步鉴定用户身份。
另外,近年来一些更加有效的身份认证技术迅速发展起来。例如智能卡技术、物理特征(指纹、声音、角膜识别等)认证技术等具有高强度的身份认证技术日益成熟,并取得了不少应用成果,为将来达到更高的安全强度要求打下了坚实的理论基础。
2.3.2 存取控制
存取控制是数据库系统内部对已经进入系统的用户的访问控制,是安全数据保护的前沿屏障。存取控制技术是数据库安全系统中的核心技术,也是最有效的安全手段。
存取控制机制主要包括两部分:
<1>定义用户权限,并将用户权限登记到数据字典中。用户权限是指不同的用户对于不同的数据对象允许执行的操作权限。系统必须提供适当的语言定义用户权限,这些定义经过编译后存放在数据字典中,被称作安全规则或授权规则。
<2>合法权限检查。每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息)、DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
用户权限定义和合法权检查机制一起组成了DBMS的安全子系统。
存取控制模型可以分为两大类:自主型存取控制(DAC)和强制型存取控制(MAC)。
<1>自主型存取控制。在这种存取控制模型中,系统用户对数据信息的存取控制主要是基于对用户身份的鉴别和存取访问规则的确定。每个用户对每个信息资源对象都要给定某个级别的存取权限,例如读权、写权等。当用户申请以某种方式存取某个资源时,系统就进行合法身份性检查,判断该用户有无此项操作权限,来决定是否许可该用户继续操作。并且,对某个信息资源拥有某种级别权限的用户可以自主地把其所拥有的该级别合法权限传授给其他任何登录系统的用户。也就是说,系统授权的合法用户可以选择其他用户一起来共享其所拥有的客体资源。一般来说,自主型存取控制将整个系统的用户授权状态表示为一个授权存取矩阵。当用户要执行某项操作时,系统就根据用户的请求与系统的授权存取矩阵进行匹配比较,通过则允许满足该用户的请求,提供可靠的数据存取方式。否则,拒绝该用户的访问请求。
在自主型存取控制中,由于用户可以自主地把自己所拥有的权限授给其他用户,而无需系统的确认。这样, 系统的授权存取矩阵就可能被直接或间接地进行修改,给数据库系统造成不安全因素。例如,用户A和用户B都是系统授权的合法用户,系统为他们分配了严格的不同级别的安全存取权限。其中,用户A对数据的D1拥有读取权限,对数据D2没有任何访问权限;而用户B对数据D2拥有读取权限。那么,用户B可以先合法地读取数据D2,然后便可以自主地把数据B发送给用户A,而无需经过系统或数据D2属主的同意。这样,用户A就能够同时拥有数据D1和数据D2,把D1和D2组合在一起,即可对系统的数据信息进行统计、分析等操作。如果这个组合数据是系统中的重要机敏数据信息,则必将给数据库系统造成极大的安全隐患。因此,自主型存取控制模型定义的安全系统,无法对抗外来的恶意攻击。在安全强度要求较高的数据库系统中必须采用强制型存取控制技术,以保证数据信息的安全性。
<2>强制型存取控制。在强制存取控制下,数据库系统给所有主体和客体分配了不同级别的安全属性,形成完整的系统授权状态。而且,该授权状态一般情况下不能被改变,这是强制型存取控制模型与自主型存取控制模型实质性的区别。一般用户或程序不能修改系统安全授权状态,只有特定的系统权限管理员才能根据系统实际的需要来有效地修改系统的授权状态,以保证数据库系统的安全性能。
强制型存取控制系统主要通过对主体和客体的已分配的安全属性进行匹配判断,决定主体是否有权对客体进行进一步的访问操作。
如在上例中,由于数据D2的安全属性级别高于用户A对它的已分配安全存取级别,数据D2不允许用户A进行存取,系统就能够拒绝用户B的传输操作,从而防止了数据的非法通信,提高了系统的安全性能。
2.3.3 数据加密
数据加密就是将明文数据经过一定的交换(一般为变序和代替)变成密文数据。与之相应,数据脱密是加密的逆过程,即将密文数据转变成可见的明文数据。
一个密码系统包含明文集合、密文集合、密钥集合和算法,其中密钥和算法构成了密码系统的基本单元。算法是一些公式、法则或程序,规定明文与密文之间的变换方法,密钥可以看作算法中的参数。数据库密码系统要求将明文数据加密成密文数据,数据库中存储密文数据,查询时将密文数据取出脱密得到明文信息。
与传统领域的数据加密技术相比,数据库的数据加密技术有其自身的显著特点:
<1>加密机制应该是实际上不可破解的。因为数据库保存的时间长,不可能采用一次一密的加密方法。但是,为了数据的安全,应当适时变换系统的密钥方案;
<2>数据加密后的存储空间应该没有明显改变。数据库一旦确定,其结构一般是不能随意改变的。因此,为了加密后的数据仍然能有效地存放在原来的数据库中,要严格限制加密后的密文数据存储大小,最好与明文数据大小相等;
<3>加密和解密的时间要求更高。数据库中的数据往往被多个用户随机存取,如果系统不能在较短的时间内完成数据的加/ 解密过程,必然会影响数据库的可用性;
<4>数据库应该把灵活的授权机制和加密机制有机地结合在一起,有利于多用户对数据的共享;
<5>要提供一套更加安全、灵活、可靠的密钥管理机构,对系统的所有密钥进行妥善管理,防止密钥的泄漏。可以采取以下几种技术:密钥简单加密处理,如简单移位等;多把锁技术,即每人掌握密钥的一部分;函数处理,即密钥是函数的变元,其函数值用于加密;密钥的层次管理,层次结构是建立在传统的对称加密体制的基础上,其基本思想是用密钥来保护密钥。
<6>数据加密时,数值类型的数据只能在数值范围内加密,日期和字符类型的数据也都只能在各自的类型范围内加密;
<7>加密机制要尽量减小对数据库基本操作的影响。加密后的数据库对数据的查询、检索、修改和更新要简便灵活。一般,数据库中采用的加密机制不对索引字段、关系运算的比较字段和表的内、外码进行加密, 这也是加密技术在数据库应用中的限制。
<8>数据库密码系统宜采用公开密钥的加密方法。传统的密码系统中,密钥是秘密的一旦获取了密钥和密码体制就能攻破密码,解开密文。但由于数据库中的数据是共享的,有权限的用户随时需要知道密钥来查询、修改、删除和插入数据,这样就要随时对数据库中数据进行加解密处理。
数据库公开密钥加密机制应是一个二元函数:密文=F(密钥,明文),当加密算法F确定之后,只要给出密钥和待加密的明文,即可得到相应的密文。脱密过程即是加密过程的逆过程:明文=F-1(密钥,密文),由此可知,数据库密码的加密机制应是既可加密又可脱密的可逆过程。数据库加、脱密密钥应该是相同、公开的,而加密算法应该是绝对保密的。
数据加密是保护数据的最基本措施,可以有效地防止数据库中数据的泄漏。
2.3.4 审计跟踪和攻击检测
审计是在数据库系统运行期间,系统自动将所有数据库的操作记录下来,通常存放在日志文件中,以便用于事后调查和分析。
有两种方式的审计,即用户审计和系统审计。用户审计时,DBMS的审计系统记下所有对自己表或视图进行访问的企图及每次操作的用户名、时间、操作代码等信息。审计的结果存储在数据库的审计表中(系统表)之中,利用这些信息用户可以进行审计分析。系统审计由系统管理员进行,其审计内容主要是系统一级命令以及数据库实例的使用情况。
攻击检测则是利用日志文件中的数据进行分析检测来自系统内外部的攻击企图,追查有关责任者,并及时发现和维护系统的安全漏洞,增强系统的安全强度。
2.3.5 系统安全恢复
随着安全技术的不断发展,安全系统要求能对已遭到破坏的系统进行尽可能完整有效的系统恢复,把损失降低到最小限度,例如广泛使用的系统备份恢复。这是安全系统的一个事后补救措施。
备份与恢复数据库是在意外发生的情况下所不可缺少的挽救手段。
第三章 Oracle数据库安全管理机制剖析
数据库安全可划分为系统安全和数据安全两类。系统安全包括的安全机制可以在整个系统范围内控制对数据库的访问和使用。如有效的用户名和口令、是否授权于用户连接数据库、用户能执行的系统操作等。数据安全包括的安全机制可以在对象(如表、视图、索引等) 这一级上控制对数据库的访问和使用,例如,哪个用户可以访问某特定的对象及对这个对象允许执行的操作(如允许查询、插入操作、删除操作) 等。
Oracle9i数据库管理系统的安全机制可以防止未授权的数据库访问,防止对具体对象的未授权访问、控制磁盘及系统资源(如CPU 时间) 的分配和使用、稽核用户行为等。这些机制的具体实现主要是由数据库管理员(DBA) 和开发人员完成的。Oracle9i使用几种不同的方式管理数据库安全,即数据库用户和对象集、特权、角色、存储空间设置和配额、资源限制、稽核等。本节针对Oracle9i数据库系统,从帐号管理、授权机制、视图机制、角色管理、审计监控、数据字典跟踪,多侧面、多角度讨论了Oracle9i数据库系统的安全管理机制,以便实现更安全、灵活的数据库安全策略。
3.1 创建及管理用户帐号
数据库的安全性不仅要防止敏感数据被窥探,而且要防止开发人员或普通用户有意或无意地进行任何干扰数据库的操作。
Oracle9i数据库系统安全管理的第一步是为每一个用户(包括系统开发人员及应用系统的操作人员) 创建相应的数据库账号,任何用户对数据库提出的任何操作都必须强制通过系统的安全设置检查之后方能实施。在最初安装Oracle9i的数据库配置助理(DCBA) 的过程中,除了SYS、SYSTEM、SCOTT、DB2SNMP、OUTLN、AURORA $J IS $UTILITY $、AURORA$ORB $UNAUTHENTICATED 和OSE $HTTP $AD2MIN 以外的所有默认的数据库用户账号都将锁定和终止。要激活某个锁定的账号,数据库管理员必须手动将其解锁并重新分配一个新的密码。SYS 账号拥有系统所有的数据字典基表和相关的数据库对象,SYSTEM账号拥有一些附加的数据字典和视图以及Oracle9i应用开发工具所用到的表和视图。任何基于Oracle9i的应用都必须建立自己的数据库账号,这样有利于维护数据库数据的安全性。
数据库账号的管理实际上包含对相关用户名、用户口令及其权限的管理,未授予权限的账号不可能执行任何操作。Oracle9i数据库安全管理的核心内容就是有关权限的管理,实质上就是控制谁有权操作数据库的哪些部分以及可以执行什么操作。
3.2 基于系统权限、对象权限的授权机制
权限(Privilege) 是授予一个Oracle9i 用户执行某种操作的许可。Oracle9i数据库的权限由SQL的Grant语句授予并且由Revoke语句收回。这两种基本命令涉及数百种不同的操作权限,但主要分为两大类:
(1) 对象权限(Object Privilege):指对一个指定的存在的数据库对象(如一个表或索引) 的操作许可权(如SELECT或UPDATE) 。
(2) 系统权限(System Privilege):指对数据库系统及数据结构的操作许可权,例如创建或删除用户、表、同义词、索引、连接数据库、修改其他用户口令等。
这两种权限的主要差别是范围的不同,一个对象权限只能授权对一个特定数据库对象的操作权限;而一个系统权限则应用于一个对象类型的所有的实例,可授权创建、修改和删除各种结构。数据库权限管理的大部分工作都遵循以对象权限为主,系统权限为辅的原则。
基于对象权限、系统权限的授权,应该特别注意下列选项的使用。谨慎使用WITH GRANT OPTION授予任何对象权限,使用WITH ADMIN OPTION 授予任何系统权限,这些选项涉及“级联”授权的问题。授权时除了要考虑需要把哪些权限赋予—个用户,还要考虑是否允许该用户把这些权限的部分或全部授予其他用户。谨慎使用PUBLIC 作为授权的接收者,一般系统权限很少授予PUBLIC,只有那些不需要考虑安全性问题的特定对象才可以授予PUBLIC。
3.3 基于视图的安全管理
表的属主或DBA 可以通过创建视图的方法对表的若干行或若干列进行授权,对视图授权的方法与对表的授权相同,但视图授权仅限于SELECT,INSERT,UPDATE 和DELETE操作。视图特权可使该视图的行或列享有某些权限,而禁止非法用户对其进行有关操作,同时那些未包含在视图中的行或列自动地受到保护。
利用视图机制可以很便捷地实现更深层次的数据库的安全保护力度。一个带选择条件的视图可以用来维护行级的安全性,那些不满足条件的行自动地得到保护。同时那些未被定义为视图字段的表的其他字段也自动地被保护起来,从而实现数据库列级的安全性。
同时利用视图可以实现属主或网络位置的透明,进一步保障了系统的安全性。当授权用户对表进行存取时必须在FROM 子句中指明表的属主,在网络环境中还必须指明数据所在的机器位置,通过创建相应视图可以隐含有关信息,使用户或程序员不必关心表的属主或数据的实际存放位置,即使发生网络结构变化、数据库变化或数据分布变化,也只需修改视图的定义,所有的应用程序不必做任何修改,同时也能有效防止数据的意外丢失或蓄意破坏。
3.4 基于角色的权限管理
数据库的权限管理是一项十分艰巨的工作。系统中的用户及应用程序都要有一定的权限集,才能进行工作。对于一个具有诸多表,诸多用户及各种不同职责的应用环境,如果数据库管理员把权限直接授予各个用户,从长远的角度来看很容易出问题,一旦应用系统改变了,用户的权限也需要相应地改变,DBA就需要做很多工作来完成这些改变。Oracle9i基于角色的权限管理较好地解决了这些问题,只需根据部门和企业的安全政策、操作规则划分出不同的数据库角色,通常可以为机构的每个职务定义一个数据库角色,然后根据需要把这些角色授予相应用户,即使某职务的权限发生了改变,也只需简单地修改该职务相对应的角色的权限,而不必修改该职务的每一个用户的权限,这样不仅保证了数据库的安全性,还大大降低了权限管理的负担和代价,减少了系统的安全漏洞。
Oracle9i的角色控制具有很强的实时性,授予角色的权限立即被分配给角色的用户使用;从一个角色取消某项权限,那么就会立即阻止与该角色有关联的所有用户使用该权限;角色还可根据需要处于激活或停顿状态,以便控制用户所授予的角色的活动。另外角色本身可以得到口令保护。基于角色的权限管理极大地加强了系统的安全控制的灵活性,进一步增强了系统的安全性能。
用SET ROLE命令可允许和禁止角色。角色的这种动态特性对于限制用户权限是非常有用的。如果角色当用户开始应用时允许:离开应用时禁止。这样用户除了使用应用时不能利用该角色的权限。用REVOKE命令从用户那儿撤销权限或角色,可以撤销一个用户的某些权限(用显式列出的)或全部权限(使用关键字ALL)。
3.5 基于审计的安全措施
Oracle9i数据库具有审计发生在其内部所有动作的能力,审计记录可以写入SYS. AUD $或操作系统的审计踪迹。
有三种不同的操作类型可以审计:注册企图、对象访问和数据库操作。
(1) 审计注册
每个连接数据库的试图都可被审计。开始审计注册企图的命令为:AUDIT SESSION ;禁止审计为:NOAUDIT SESSION 审计连接企图成功命令:AUDITSESSION WHENEVER SUCCESSFUL;
审计连接企图失败命令:AUDIT SESSIONWHENEVER NOT SUCCESSFUL;
审计纪录存在SYS. AUD $表中,可通过该表的DBAAUDIT-SESSION 数据字典视图查看。
(2) 操作审计
影响数据库对象,如表、数据库链、表空间、同义词、回滚段、用户或索引的任何操作都可被审计。能影响对象的可能操作,如CREATE、ALTER 和DROP可以在审计时编成组。审计影响表的所有命令:AUDIT TABLE;禁止审计为:NOAUDIT TABLE;审计影响表、簇、视图、索引、表空间、类型和同义词的建立和删除的命令组:AUDIT RESOURCE;禁止审计为:NOAUDIT RESOURCE;可通过AUDIT-ACTIONS 数据字典视图查看审计纪录。
(3) 对象审计
除了系统级的对象操作,对对象的数据交换操作也可以审计。这些操作可以包括对表的选择、插入、更新和删除等操作。
对象审计附加的子句是BY SESSION 或BY ACCESS。这个子句指定一个审计记录在每个对话(BYSESSION)或每次访问对象(BY ACCESS)时写入。例如,如果一个用户对同一张表执行了四次不同的更新操作,那么BY ACCESS 审计就会有四个审计记录,每次访问表都审计一次。另一方面,用BY SESSION 审计同样的情形
展开阅读全文