数据库的安全性与完整性.docx
《数据库的安全性与完整性.docx》由会员分享,可在线阅读,更多相关《数据库的安全性与完整性.docx(24页珍藏版)》请在冰点文库上搜索。
数据库的安全性与完整性
4数据库的安全性与完整性
数据库在各种信息系统中得到广泛的应用,数据在信息系统中的价值越来越重要,数据库系统的安全与保护成为一个越来越值得重要关注的方面。
数据库系统中的数据由DBMS统一管理与控制,为了保证数据库中数据的安全、完整和正确有效,要求对数据库实施保护,使其免受某些因素对其中数据造成的破坏。
一般说来,对数据库的破坏来自以下4个方面:
(1)非法用户
非法用户是指那些XX而恶意访问、修改甚至破坏数据库的用户,包括那些超越权限来访问数据库的用户。
一般说来,非法用户对数据库的危害是相当严重的。
(2)非法数据
非法数据是指那些不符合规定或语义要求的数据,一般由用户的误操作引起。
(3)各种故障
各种故障指的是各种硬件故障(如磁盘介质)、系统软件与应用软件的错误、用户的失误等。
(4)多用户的并发访问
数据库是共享资源,允许多个用户并发访问(ConcurrentAccess),由此会出现多个用户同时存取同一个数据的情况。
如果对这种并发访问不加控制,各个用户就可能存取到不正确的数据,从而破坏数据库的一致性。
针对以上4种对数据库破坏的可能情况,数据库管理系统(DBMS)核心已采取相应措施对数据库实施保护,具体如下:
(1)利用权限机制,只允许有合法权限的用户存取所允许的数据,这就是本章4.1节“数据库安全性”应解决的问题。
(2)利用完整性约束,防止非法数据进入数据库,这是本章4.2节“数据库完整性”应解决的问题。
(3)提供故障恢复(Recovery)能力,以保证各种故障发生后,能将数据库中的数据从错误状态恢复到一致状态,此即本章4.3节“故障恢复技术”的内容。
(4)提供并发控制(ConcurrentControl)机制,控制多个用户对同一数据的并发操作,以保证多个用户并发访问的顺利进行,此即本章4.4节“并发控制”的内容。
4.1数据库安全性
4.1.1数据库安全性问题的概述
1.数据库安全问题的产生
数据库的安全性是指在信息系统的不同层次保护数据库,防止未授权的数据访问,避免数据的泄漏、不合法的修改或对数据的破坏。
安全性问题不是数据库系统所独有的,它来自各个方面,其中既有数据库本身的安全机制如用户认证、存取权限、视图隔离、跟踪与审查、数据加密、数据完整性控制、数据访问的并发控制、数据库的备份和恢复等方面,也涉及到计算机硬件系统、计算机网络系统、操作系统、组件、Web服务、客户端应用程序、网络浏览器等。
只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出,每一个方面产生的安全问题都可能导致数据库数据的泄露、意外修改、丢失等后果。
例如,操作系统漏洞导致数据库数据泄漏。
微软公司发布的安全公告声明了一个缓冲区溢出漏洞(NT、Windows2000、Windows2003等操作系统都受到影响。
有人针对该漏洞开发出了溢出程序,通过计算机网络可以对存在该漏洞的计算机进行攻击,并得到操作系统管理员权限。
如果该计算机运行了数据库系统,则可轻易获取数据库系统数据。
特别是MicrosoftSQLServer的用户认证是和Windows集成的,更容易导致数据泄漏或更严重的问题。
又如,没有进行有效的用户权限控制引起的数据泄露。
Browser/Server结构的网络环境下数据库或其他的两层或三层结构的数据库应用系统中,一些客户端应用程序总是使用数据库管理员权限与数据库服务器进行连接(如MicrosoftSQLServer的管理员SA),在客户端功能控制不合理的情况下,可能使操作人员访问到超出其访问权限的数据。
在安全问题上,DBMS应与操作系统达到某种意向,理清关系,分工协作,以加强DBMS的安全性。
数据库系统安全保护措施是否有效是数据库系统的主要指标之一。
为了保护数据库,防止恶意的滥用,可以从低到高的五个级别上设置各种安全措施。
(1)环境级:
计算机系统的机房和设备应加以保护,防止有人进行物理破坏。
(2)职员级:
工作人员应清正廉洁,正确授予用户访问数据库的权限。
(3)OS级:
应防止XX的用户从OS处着手访问数据库。
(4)网络级:
由于大多数DBS都允许用户通过网络进行远程访问,因此网络软件内部的安全性至关重要。
(5)DBS级:
DBS的职责是检查用户的身份是否合法及使用数据库的权限是否正确。
本章只讨论与数据库系统中的数据保护密切相关的内容。
2.数据库的安全标准
目前,国际上及我国均颁布有关数据库安全的等级标准。
最早的标准是美国国防部(DOD)1985年颁布的《可信计算机系统评估标准》(ComputerSystemEvaluationCriteria,TCSEC)。
1991年美国国家计算机安全中心(NCSC)颁布了《可信计算机系统评估标准关于可信数据库系统的解释》(TrustedDatebaseInterpreation,TDI),将TCSEC扩展到数据库管理系统。
1996年国际标准化组织ISO又颁布了《信息技术安全技术——信息技术安全性评估准则》(InformationTechnologySecurityTechniques——EvaluationCriteriaForItSecruity)。
我国政府于1999年颁布了《计算机信息系统评估准则》。
目前国际上广泛采用的是美国标准TCSEC(TDI),在此标准中将数据库安全划分为4大类,由低到高依次为D、C、B、A。
其中C级由低到高分为C1和C2,B级由低到高分为B1、B2和B3。
每级都包括其下级的所有特性,各级指标如下:
(1)D级标准:
为无安全保护的系统
(2)C1级标准:
只提供非常初级的自主安全保护。
能实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播。
(3)C2级标准:
提供受控的存取保护,即将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和资源隔离。
很多商业产品已得到该级别的认证。
(4)B1级标准:
标记安全保护。
对系统的数据加以标记,并对标记的主体和客体实施强制存取控制(MAC)以及审计等安全机制。
一个数据库系统凡符合B1级标准者称之为安全数据库系统或可信数据库系统。
(5)B2级标准:
结构化保护。
建立形式化的安全策略模型并对系统内的所有主体和客体实施DAC和MAC。
(6)B3级标准:
安全域。
满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程。
(7)A级标准:
验证设计,即提供B3级保护的同时给出系统的形式化设计说明和验证,以确信各安全保护真正实现。
我国的国家标准的基本结构与TCSEC相似。
我国标准分为5级,从第1级到第5级依次与TCSEC标准的C级(C1、C2)及B级(B1B2B3)一致。
4.1.2数据库的安全性机制
在一般计算机系统中,安全措施是一级一级层层设置的,如图6-1所示。
在图6.1的安全模型中,用户要进入计算机系统,系统首先根据输入的用户标识进行用户身份鉴定,只有合法的用户才准许进入计算机系统。
对已经进入系统的用户,DBMS要进行存取控制,只允许用户执行合法操作。
操作系统一级也会有自己的保护措施。
数据最后还可以以密码形式存储在数据库中。
在本节中对数据库的一些逻辑安全机制进行介绍,包括用户认证、存取权限,视图隔离、数据加密、跟踪与审查等内容作介绍。
1.用户认证
数据库系统不允许一个XX的用户对数据库进行操作。
用户标识与鉴别,即用户认证,是系统提供的最外层安全保护措施。
其方法是由系统提供一定的方式让用户标识自己的名字或身份,每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供机器使用权。
对于获得上机权的用户若要使用数据库时,数据库管理系统还要进行用户标识和鉴定。
用户标识和鉴定的方法有很多种,而且在一个系统中往往多种方法并用,以得到更强的安全性。
常用的方法是用户名和口令。
通过用户名和口令来鉴定用户的方法简单易行,但其可靠程度极差,容易被他人猜出或测得。
因此,设置口令法对安全强度要求比较高的系统不适用。
近年来,一些更加有效的身份认证技术迅速发展起来。
例如使用某种计算机过程和函数、智能卡技术,物理特征(指纹、声音、手图等)认证技术等具有高强度的身份认证技术日益成熟,并取得了不少应用成果,为将来达到更高的安全强度要求打下了坚实的理论基础。
2.存取控制
数据库安全性所关心的主要是DBMS的存取控制机制。
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。
存取控制是数据库系统内部对已经进入系统的用户的访问控制,是安全数据保护的前沿屏障,是数据库安全系统中的核心技术,也是最有效的安全手段。
在存取控制技术中,DBMS所管理的全体实体分为主体和客体两类。
主体(Subject)是系统中的活动实体,包括DBMS所管理的实际用户,也包括代表用户的各种进程。
客体(Object)是存储信息的被动实体,是受主体操作的,包括文件、基本表、索引和视图等。
数据库存取控制机制包括两个部分:
一是定义用户权限,并将用户权限登记到数据字典中。
用户权限是指不同的用户对不同的数据对象允许执行的操作权限。
系统必须提供适当的语言定义用户权限,这些定义经过编译后存放在数据字典中,被称作系统的安全规则或授权规则。
二是合法性权限检查。
当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象、操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义权限,系统将拒绝执行此操作。
存取控制包括自主型存取控制(DAC)和强制型存取控制(MAC)两种类型。
(1)自主存取控制(DiscretionaryAccessControl,DAC)
自主型存取控制是用户访问数据库的一种常用安全控制方法,较为适合于单机方式下的安全控制,大型数据库管理系统几乎都支持自主存取控制。
在自主型存取控制中,用户对于不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。
用户权限由数据对象和操作类型这两个因素决定。
定义一个用户的存取权限就是要定义这个用户在哪些数据对象上进行哪些类型的操作。
在数据库系统中,定义存取权限称为授权。
自主型存取控制的安全控制机制是一种存取矩阵的模型,此模型由主体、客体与存/取操作构成,矩阵的列表示主体,矩阵的行表示客体,而矩阵中的元素表示存/取操作(如读、写、修改和删除等),如图6-2所示。
主体
客体
主体1
主体2
……
主体n
客体1
write
delete
……
update
客体2
delete
read
……
Write/read
……
……
……
……
……
客体m
update
read
……
update
图6-2授权存/取矩阵模型
在这种存取控制模型中,系统根据对用户的授权构成授权存取矩阵,每个用户对每个信息资源对象都要给定某个级别的存取权限,例如读、写等。
当用户申请以某种方式存取某个资源时,系统就根据用户的请求与系统授权存取矩阵进行匹配比较,通过则允许满足该用户的请求,提供可靠的数据存取方式,否则,拒绝该用户的访问请求。
目前的SQL标准也对自主存取控制提供支持,主要是通过SQL的GRANT语句和REVOKE语句来是实现权限的授予和收回,这部分内容将在下节中作祥细介绍。
自主存取控制能够通过授权机制有效地控制其他用户对敏感数据的存取,但是由于用户对数据的存取权限是“自主”的,用户可以自由地决定将数据的存取权限授予别的用户,而无需系统的确认。
这样,系统的授权存取矩阵就可以被直接或间接地进行修改,可能导致数据的“无意泄漏”,给数据库系统造成不安全因素。
要解决这一问题,就需要对系统控制下的所有主体、客体实施强制型存取控制策略。
(2)强制存取控制(MandatoryAccessControl,MAC)
所谓MAC是指系统为保证更高程度的安全性,按照TCSEC(TDI)标准中安全策略的要求,所采取的强制存取检查手段,较为适用于网络环境,对网络中的数据库安全实体作统一的、强制性的访问管理。
强制型存取控制系统主要通过对主体和客体的已分配的安全属性进行匹配判断,决定主体是否有权对客体进行进一步的访问操作。
对于主体和客体,DBMS为它们的每个实例指派一个敏感度标记(Label)。
敏感度标记被分成若干级别,例如绝密、机密、可信、公开等。
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。
在强制存取控制下,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。
对于任意一个对象,只有具有合法许可证的用户才可以存取。
而且,该授权状态一般情况下不能被改变,这是强制型存取控制模型与自主型存取控制模型实质性的区别。
一般用户或程序不能修改系统安全授权状态,只有特定的系统权限管理员才能要根据系统实际的需要来有效地修改系统的授权状态,以保证数据库系统的安全性能。
强制存取控制策略是基于以下两个规则:
●仅当主体的许可证级别大于或等于客体的密级时,主体对客体具有读权限。
●仅当客体的密级大于或等于主体的许可证级别时,主体对客体具有写权限。
这两种规则的共同点在于它们均禁止了拥有高许可证级别的主体更新低密级的数据对象,从而防止了敏感数据的泄漏。
强制安全存取控制模型的不足之处是可能给用户使用自己的数据时带来诸多的不便,其原因是这些限制过于严格,但是对于任何一个严肃的安全系统而言,强制安全存取控制是必要的,可以避免和防止大多数有意无意对数据库的侵害。
较高安全性级别提供的安全保护要包含较低级别的所有保护,因此在实现强制存取控制时要首先实现自主存取控制,即自主存取控制与强制存取控制共同构成DBMS的安全机制。
系统首先进行自主存取控制检查,对通过检查的允许存取的主体与客体再由系统进行强制存取控制的检查,只有通过检查的数据对象方可存取。
3.视图隔离
视图是数据库系统提供给用户以多种角度观察数据库中数据的重要机制,是从一个或几个基表(或视图)导出的表,它与基表不同,是一个虚表。
数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
从某种意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
进行存取权限控制时,可以为不同的用户定义不同的视图,把访问数据的对象限制在一定的范围内,也就是说,通过视图机制要把保密的数据对无权存取的用户隐藏起来,从而对数据提供一定程度的安全保护。
需要指出的是,视图机制最主要的功能在于提供数据独立性,在实际应用中,常常将视图机制与存取控制机制结合起来使用,首先用视图机制屏蔽一部分保密数据,再在视图上进一步定义存取权限。
通过定义不同的视图及有选择地授予视图上的权限,可以将用户、组或角色限制在不同的数据子集内。
4.数据加密
前面介绍的几种数据库安全措施,都是防止从数据库系统中窃取保密数据。
但数据存储在存盘、磁带等介质上,还常常通过通信线路进行传输,为了防止数据在这些过程中被窃取,较好的方法是对数据进行加密。
对于高度敏感性数据,例如财务数据、军事数据、国家机密,除了上述安全措施外,还可以采用数据加密技术。
加密的基本思想是根据一定的算法将原始数据(术语为明文)变换为不可直接识别的格式(术语为密文),从而使得不知道解密算法的人无法获知数据的内容。
数据解密是加密的逆过程,即将密文数据转变成可见的明文数据。
一个密码系统包含明文集合、密文集合、密钥集合和算法,其中密钥和算法构成了密码系统的基本单元。
算法是一些公式、法则或程序,它规定明文与密文之间的变换方法,密钥可以看作算法中的参数。
如图6-3所示。
加密方法可分为对称加密与非对称加密两种。
所谓对称加密,其加密所用的密钥与解密所用的密钥相同。
典型的代表是DES(DataEncryptionStandard,数据加密标准)。
所谓非对称加密,其加密所用的密钥与解密所用的密钥不相同,其中加密的密钥可以公开,而解密的密钥不可以公开。
数据加密和解密是相当费时的操作,其运行程序会占有大量系统资源,因此数据加密功能通常是可选特征,允许用户自由选择,一般只对机密数据加密。
5.审计
审计功能是DBMS达到C2级以上安全级别必不可少的指标。
这是数据库系统的最后一道安全防线。
审计功能把用户对数据库的所有操作自动记录下来,存放在日志文件中。
DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法访问数据库的人、时间、地点以及所有访问数据库的对象和所执行的动作。
有两种审计方式,即用户审计和系统审计。
(1)用户审计:
DBMS的审计系统记下所有对表或视图进行访问的企图(包括成功的和不成功的)及每次操作的用户名、时间、操作代码等信息。
这些信息一般都被记录在数据字典(系统表)之中,利用这些信息用户可以进行审计分析。
(2)系统审计:
由系统管理员进行,其审计内容主要是系统一级命令以及数据库客体的使用情况。
审计通常是很费时间和空间的,所以DBMS往往将其作为可选特征,一般主要用于安全性要求较高的部门。
4.1.3SQLServer的安全性策略
如果一个用户要访问SQLServer数据库中的数据,必须经过三个认证过程。
第一个认证过程是身份验证,需通过登录帐户来标识用户。
身份验证只验证用户是否具有连接到SQLServer数据库服务器的资格。
第二个认证过程是当用户访问数据库时,必须具有对具体数据库的访问权,即验证用户是否是数据库的合法用户。
第三个认证过程是当用户操作数据库中的数据对象时,必须具有相应的操作权,即验证用户是否具有操作权限。
SQLServer的安全性管理包括了用户身份认证、存取控制、视图隔离、数据加密、跟踪与审计等几个方面,下面分别作简要介绍。
1.用户身份认证
SQLServer的用户有两种类型:
(1)Windows授权用户:
来自于Windows的用户或组。
(2)SQL授权用户:
来自于非Windows的用户,称其为SQL用户。
MicrosoftSQLServer为不同的用户类型提供了不同的安全认证模式。
(1)Windows身份验证模式
Windows身份验证模式使用户得以通过MicrosoftWindowsNT4.0或Windows2000用户帐户进行连接SQLServer。
用户必须首先登录到Windows中,然后再登录到SQLServer。
用户登录到SQLServer时,只需选择Windows身份验证模式,无需再提供登录帐户和密码,系统会从用户登录到Windows时提供的用户名和密码中查找用户的登录信息,以判断其是否为SQLServer的合法用户。
对于SQLServer来说,一般推荐使用Windows身份验证模式。
因为这种安全模式能够与Windows操作系统的安全系统集成在一起,用户的网络安全特性在网络登录时建立,并通过Windows域控制器进行验证,从而提供更多的安全功能。
但Windows验证模式只能用在WindowsNT4.0或Windows2000服务器版操作系统的服务器上,在Windows98等个人操作系统上,不能使用Windows身份验证模式,只能使用混合验证模式。
(2)混合验证模式
混合验证模式表示SQLServer接受Windows授权用户和SQL授权用户。
如果不是Windows操作系统的用户或者是Windows98操作系统的用户使用SQLServer,则应该选择混合验证模式。
如果在混合模式下选择使用SQL授权用户登录SQLServer,则用户必须提供登录名和密码,SQLServer使用这两部分内容来验证用户,SQLServer通过检查是否已设置SQLServer登录帐户,以及指定的密码是否与记录的密码匹配,进行身份验证。
另外,因为在Windows98上不支持Windows身份验证模式,因此,SQLServer在Windows98上运行时应使用混合模式,且只支持SQLServer身份验证。
SQLServer在安装时,会自动创建一个DB服务器的登录用户sa,即系统管理员,用以创建其他登录用户和授权。
数据库服务器登录用户的创建,可利用存储过程来进行,命令如下:
sp_addlogin[@loginame=]'登录名'
[,[@passwd=]'口令']
[,[@defdb=]'默认数据库名']
2.SQLServer数据库用户
SQLServer在安装时,自动创建了一个默认数据库用户,即guest。
一个登录用户在被设定为某个数据库用户之前,可用guest用户身份访问数据库,只不过其权限非常有限。
SQLServer可用以下命令授权登录用户成为数据库用户,该命令必须在所要访问的数据库下执行:
sp_adduser[@loginame=]'登录名'
[,[@name_in_db=]'访问数据库时用的名字']
3.存取控制
当用户成为数据库中的合法用户后,他除了可以查询系统表之外,并不具有操作数据库中对象的任何权限,因此,需给数据库中的用户授予操作数据库对象的权限。
SQLServer对权限的管理包含如下三个内容:
●授予权限:
允许用户或角色具有某种操作权。
●收回权限:
删除以前在当前数据库内的用户上授予或拒绝的权限。
●拒绝权限:
拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员继承权限。
在SQLServer2000中,权限分为对象权限、语句权限和隐含权限三种。
(1)对象权限
对象权限是指用户对数据库中的表、视图等对象的操作权,相当于数据操作语言的语句权限,例如是否运行查询、增加和修改数据等。
表、视图的权限包括SELECT、INSERT、DELETE、UPDATE。
列的权限包括SELECT和UPDATE。
存储过程的权限包括EXECUTE。
●授权语句:
GRANT对象权限名[,…]ON{表名|视图名|存储过程名}TO{数据库用户名|用户角色名}[,…][WITHGRANTOPTION]
可选项[WITHGRANTOPTION]表示获得权限的用户还能获得传递权限,把获得的权限传授给其他用户。
例如:
GRANTSELECT,INSERTONStudentTOuser1WITHGRANTOPTION
该语句把对Student表的查询权和插入权授予给用户user1,user1同时获得将这些权限转授给别的用户的权限。
GRANTUPDATE(Name)ONStudentTOuser1
该语句把对Student表的姓名属性的修改权授予给用户user1。
●收回权限语句:
REVOKE对象权限名[,…]ON{表名|视图名|存储过程名}FROM{数据库用户名|用户角色名}[,…][RESTRICT|CASCADE]
可选项[RESTRICT|CASCADE]中,CASCADE表示回收权限时要引起连锁回收。
即从用户Ui回收权限时,要把用户Ui转授出去的同样的权限同时回收。
RESTRICT表示,当不存在连锁回收时,才能回收权限,否则系统拒绝回收。
例如:
REVOKEINSERTONStudentFROMuser1CASCADE
该语句表示从用户user1处收回对Student表的插入权,若user1已把获得的对Student表的插入权转授给其他用户,则连锁收回。
REVOKEINSERTONStuden