数据库安全性•数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。•数据库的安全性和计算机系统的安全性是紧密联系、相互支持的。计算机系统的安全性问题•技术安全类采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护。•管理安全类软硬件意外故障,场地的意外事故,计算机设备和数据介质的物理破坏、丢失等安全问题。•政策法律类政府部门建立的有关计算机犯罪、数据安全保密的法律道德准则和政策法规、法令。可信计算机系统评测标准♦为降低进而消除对系统的安全攻击,尤其是弥补原有系统在安全保护方面的缺陷,在计算机安全技术方面逐步建立了一套可信标准。在目前各国所引用或制定的一系列安全标准中,最有影响的当推1985年美国国防部(DoD)正式颁布的《DoD可信计算机系统评估标准》,简称TCSEC或DoD85,以及CC这两个标准。♦在TCSEC推出后的10年里,不同的国家都开始启动开发建立在TCSEC概念上的评估准则,如欧洲的ITSEC,加拿大的CTCPEC,美国的FC等。这些准则比TCSEC更加灵活,适应了IT技术的发展。♦这些准则的发起组织于1993年起开始联合行动,解决原标准中概念和技术上的的差异,将各自独立的准则集合成一组单一的、能被广泛使用的IT安全准则,这一行动被称为CC(CommonCriteria)项目。历经多次讨论和修订,CCV2.1版于1999年被ISO采用为国际标准,2001年被我国采用为国家标准。目前CC已经基本取代了TCSEC。TDI/TCSEC标准•TCSEC又称桔皮书,1991年4月美国NCSC(国家计算机安全中心)颁布了《可信计算机系统评估标准关于可信数据库系统的解释》,简称TDI。将TCSEC扩展到数据库管理系统。TDI中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准。•TDI/TCSEC标准从以下四个方面来描述安全性级别划分的指标:安全策略,责任,保证和文档.每个方面又细分为若干项。♦根据计算机系统对标准中各项指标的支持情况,TCSEC(TDI)将系统划分为四组七个等级:(详细见书)数据库安全性控制•在一般计算机系统中,安全措施是一级一级层层设置的:•用户标识与鉴别一般通过用户名和口令来实现。用户DBMSOSDB用户标识和鉴别存取控制操作系统安全保护数据密码存储存取控制•数据库安全性所关心的主要是DBMS的存取控制机制。•确保只有合法用户才能访问数据库,一般通过授权来实现。•存取控制机制主要包括两部分:(1)定义用户权限定义不同用户对于不同的数据对象允许执行的操作权限。系统提供适当的语言来定义,经编译后存放在数据字典中。(2)合法权限检查每当用户发出存取数据库的操作请求后,DBMS查找数据字典中存储的权限定义,检查用户操作的合法性。•用户权限定义和合法权检查机制一起组成了DBMS的安全子系统。TDI安全策略中的存取控制◆自主存取控制用户对于不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。当前大型的DBMS一般都支持C2级中的自主存取控制(DAC),SQL标准也通过GRANT语句和REVOKE语句对其提供了支持。◆强制存取控制每一数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。有些DBMS也支持B1级中的强制存取控制(MAC)。自主存取控制方法•用户权限是由两个要素组成的:(1)数据对象(2)操作类型•定义一个用户的存取权限就是要定义这个用户可以在哪些数据对象上进行哪些类型的操作。•存取权限的定义称为授权。关系系统中的存取权限对象类型对象操作类型数据库模式基本表CREATESCHEMACREATETABLE,ALTERTABLE模式视图索引CREATEVIEWCREATEINDEX数据基本表和视图SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALLPRIVILEGES数据属性列SELECT,INSERT,UPDATE,REFERENCES,ALLPRIVILEGESSQL中的自主存取控制在SQL中通过GRANT语句来进行授权:GRANT权限[,权限]…ON对象类型对象名[,对象类型对象名]…TO用户[,用户]…[WITHGRANTOPTION];•功能:将对指定操作对象的指定操作权限授予指定的用户。•谁定义?DBA和表的建立者(即表的属主)•指定了WITHGRANTOPTION子句:获得某种权限的用户还可以把这种权限再授予别的用户。•没有指定WITHGRANTOPTION子句:获得某种权限的用户只能使用该权限,不能传播该权限例题例1把查询和插入Student表权限授给用户U1GRANTSELECT,INSERTONTABLEStudentTOU1;例题(续)例2把对Student表和Course表的全部权限授予用户U2和U3GRANTALLPRIVILIGESONTABLEStudent,CourseTOU2,U3;例4例题(续)例3把对表SC的查询权限授予所有用户GRANTSELECTONTABLESCTOPUBLIC;例题(续)例4把查询Student表和修改学生学号的权限授给用户U4GRANTUPDATE(Sno),SELECTONTABLEStudentTOU4;例题(续)例5把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户GRANTINSERTONTABLESCTOU5WITHGRANTOPTION;传播权限执行例5后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限:GRANTINSERTONTABLESCTOU6WITHGRANTOPTION;同样,U6还可以将此权限授予U7:GRANTINSERTONTABLESCTOU7;但U7不能再传播此权限。U5--U6--U7例题(续)例6DBA把在数据库S_C中建立表的权限授予用户U8GRANTCREATETABONDATABASES_CTOU8;通过REVOKE语句来收回权限:REVOKE权限[,权限]…ON对象类型对象名[,对象类型对象名]…FROM用户[,用户]…[CASCADE|RESTRICT];•功能:从指定用户那里收回对指定对象的指定权限例题例7把用户U4修改学生学号的权限收回REVOKEUPDATE(Sno)ONTABLEStudentFROMU4;例题(续)例8收回所有用户对表SC的查询权限REVOKESELECTONTABLESCFROMPUBLIC;例题(续)例9把用户U5对SC表的INSERT权限收回REVOKEINSERTONTABLESCFROMU5CASCADE;权限的级联回收系统将收回直接或间接从U5处获得的对SC表的INSERT权限:--U5--U6--U7收回U5、U6、U7获得的对SC表的INSERT权限:--U5--U6--U7支持存取谓词的用户权限定义(提供与数据值/内容有关的授权)用户名数据对象名允许的操作类型存取谓词王平关系StudentSELECTSdept=‘CS’张明霞关系StudentUPDATESname=‘张明霞’张明霞关系CourseALL空创建数据库模式的权限•GRANT和REVOKE语句向用户授予或收回对数据的操作权限。对数据库模式的授权则由DBA在创建用户时实现。•CREATEUSERusername[WITH][DBA|RESOURCE|CONNECT];•只有系统的超级用户才有权创建一个新的数据库用户。•新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA。数据库角色角色是权限的集合,使用角色可以简化授权的过程。•角色的创建CREATEROLE角色名刚刚创建的角色是空的,没有任何内容,可以用GRANT为角色授权。•给角色授权GRANT权限[,权限]…ON对象类型对象名TO角色[,角色]…•将一个角色授予其他角色或用户GRANT角色1[,角色2]…TO角色3[,用户1]…[WITHADMINOPTION]•角色权限的收回REVOKE权限[,权限]…ON对象类型对象名FROM角色[,角色]…强制存取控制(MAC)方法•MAC适用于那些对数据有严格而固定密级分类的部门。•在MAC中,DBMS所管理的全部实体被分为主体和客体两大类:主体是系统中的活动实体(用户、进程等);客体是系统中的被动实体(文件,基表、索引等),是受主体操纵的。•DBMS为每个主体和客体指派一个敏感度标记(Label),主体称为许可证级别,客体称为密级。主体对客体的存取必须遵循如下规则:(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;(2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。•强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。视图机制•视图是实施安全性控制的一种有效机制。通过为不同用户定义不同的视图,并对每个用户授予在某个视图上的存取权限。这样可以严格限制每个用户对基表的存取操作,如只能存取基表中的某些列、某些行,从而把要保密的数据对无权存取的用户隐藏起来,自动地对数据提供一定程度的安全保护。•视图机制间接地实现了支持存取谓词的用户权限定义。例子•CREATEVIEWCS_StudentASSELECT*FROMStudentWHERESdept=‘CS’;GRANTSELECTONCS_StudentTO王平;审计(Audit)•按照TDI/TCSEC标准中安全策略的要求,“审计”功能是DBMS达到C2以上安全级别必不可少的一项指标。•审计功能把用户对数据库的所有操作自动记录下来放入审计日志(AuditLog)中。DBA可以利用审计跟踪的信息,找出非法存取数据的人、时间和内容等。•审计通常是很费时间和空间的,一般可以根据应用对安全性的要求,灵活地打开或关闭审计功能。数据加密•对于高度敏感性数据,除以上安全性措施外,还可以采用数据加密技术。•数据加密是防止数据库中数据在存储和传输中失密的有效手段。•目前有些数据库产品提供了数据加密(例行)程序,可根据用户的要求自动对存储和传输的数据进行加密处理。•数据加密与解密程序会占用大量系统资源且耗时,因此数据加密功能通常也作为可选特征。Oracle数据库的安全性措施•用户标识和鉴定•授权与检查机制与前面讲的存取控制方法基本相同。•Oracle的审计技术(1)用户级审计用户针对自己创建的数据库表或试图进行审计,记录所有用户对这些表或视图的一切成功或不成功的访问要求以及各种类型的SQL操作。(2)系统级审计由DBA设置,用以监测成功或失败的登陆要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。Oracle的审计功能•Oracle的审计功能很灵活,是否使用审计,对哪些表进行审计,对那些操作进行审计等都可以由用户选择。•对修改SC表结构或数据的操作进行审计可使用如下语句:AUDITALTER,UPDATEONSC;•取消对SC表的一切审计可使用如下语句:NOAUDITALLONSC;•审计设置以及审计内容均存放在数据字典中。用户定义的安全性措施•除了系统级的安全性措施外,Oracle还允许用户用数据库触发器定义特殊的更复杂的用户级安全性措施。•例如,规定只能在工作时间内更新Student表,可以定义如下触发器:CREATETRIGGERsecure_studentBEFOREINSERTORUPDATEORDELETEONStudentBEGINIF(TO_CHAR(sysdate,‘DY’)IN(‘SAT’,‘SUN))OR(TO_NUMBER