数据库系统基础教程第7章数据库安全性与完整性•计算机普及带来数据保密•企业运营需要防止数据被破坏•巨额资金数据库管理需要保护数据第7章数据库安全性与完整性:7.1安全性保护7.1数据库安全性保护7.1.1数据库安全性问题提出•1.计算机外部环境保护•2.计算机内部系统保护第7章数据库安全性与完整性:7.1安全性保护7.1.2数据库安全性保护范围•关系数据库系统的软件平台是操作系统,DBMS需要建立在操作系统之上,操作系统统管数据系统的各种资源,同时某些DBMS还使用操作系统中的文件管理功能。安全的操作系统是安全的数据库重要前提。操作系统应能保证数据库中的数据必须经由DBMS方可访问,不容许用户超越DBMS直接通过操作系统进入数据库。即是说,数据库必须时刻处在DBMS的监控之下,即使通过操作系统要访问数据库,也必须在DBMS中办理注册手续。第7章数据库安全性与完整性:7.1安全性保护7.1.3操作系统安全性保护•1.身份标识与鉴别•用户身份标识与鉴别(IdentificationAndAuthentication)是系统提供的最外层安全保护措施。其方法是每个用户在系统中必须有一个标志自己身份的标识符,用以和其它用户相区别。当用户进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核对,通过鉴别后方提供数据库的使用权第7章数据库安全性与完整性:7.1安全性保护7.1.4DBMS安全性保护(1)•2.存取控制•在存取控制技术中,DBMS所管理的全体实体分为主体和客体两类。•主体(Subject)是系统中的活动实体,它包括DBMS所管理的实际用户,也包括代表用户的各种进程。客体(Object)是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引和视图等。第7章数据库安全性与完整性:7.1安全性保护7.1.4DBMS安全性保护(2)•3.审计追踪•在数据库安全中除了采取有效手段对主体访问客体作检查外,还采取辅助的跟踪、审计手段,随时记录主体对客体访问的轨迹,并做出分析供参考,同时在一旦发生非法访问后即能提供初始记录供进一步处理,这就是数据库安全保护中的审计(Audit)。在DBS中,通常将用于安全目的的数据库日志称为审计追踪(audittrail)第7章数据库安全性与完整性:7.1安全性保护7.1.4DBMS安全性保护(3)•1.视图机制•在数据库安全性问题中,一般用户使用数据库时,需要对其使用范围设定必要限制,即每个用户只能访问数据库中的一部分数据。这种必须的限制可以通过使用视图实现。具体来说,就是根据不同的用户定义不同的视图,通过视图机制将具体用户需要访问的数据加以确定,而将要保密的数据对无权存取这些数据的用户隐藏起来,使得用户只能在视图定义的范围内访问数据,不能随意访问视图定义外的数据,从而自动地对数据提供相应的安全保护。第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(1)•2.授权机制•在SQL中提供了自主访问控制权的功能,它包括了操作、数据域和用户等部分。•①操作•SQL提供六种操作权限。•●SELECT权限:即数据对象查询权。•●INSERT权限:即数据对象插入权。•●DELETE权限:即数据对象删除权。第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(2)•●UPDATE权限:即数据对象修改权。•●REFRENCE权限:也就是定义新表时允许使用其它表的属性集作为其外键。•●USAGE权:也就是允许用户使用已定义的属性。第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(3)•②数据对象•数据对象即是用户访问的数据对象的粒度,SQL包含三种数据对象。•●表:即是以基本表作为访问对象。•●视图:即是以视图为访问对象。•●属性:即是以基表中属性为访问对象。•③用户•即是数据库中所登录的用户。第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(4)•④授权语句•SQL提供了授权语句,其语句形式如下:•GRANT{权限1,权限2…|ALL}•[ON对象类型对象名]•TO{用户[,用户]…|PUBLIC}•[WITHGRANTOPTION]第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(5)•⑤回收语句用户A将某权限授予用户B,则用户A也可以在它认为必要时将权限从B中回收,收回权限的语句称为回收语句,其具体形式如下:•REVOKE{|权限ALL}•[ON对象类型对象名]•FROM{用户1,用户2,…|PUBLIC}•[CASCADE|RESTRICT]第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(6)•3.角色机制•在较大规模的DBS中,用户数量通常都非常之大,使用数据库的权限也不尽相同。为了便于管理,需要引入角色概念。第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(7)•可以把使用数据库的权限用GRANT语句授予角色,在把角色授予用户,这样用户就拥有了使用数据库的权限,其一般语句格式如下:•GRANT权限表ON基本表或视图名TO角色名•GRANT角色名TO用户名•角色之间可以存在一个角色链,也就是说可以将一个角色授予另一个角色,而后一个角色也拥有前一个角色的权限,其语句格式为:•GRANT角色名1TO角色名2第7章数据库安全性与完整性:7.1安全性保护7.1.5SQL安全性保护机制(8)•通常所讲到的数据库的完整性(Integrity)的基本含义是指数据库的正确性、有效性和相容性,其主要目的是防止错误的数据进入数据库。•●正确性(correctness)是指数据的合法性,例如数值型数据中只能含有数字而不能含有字母。•●有效性(valid)是指数据是否属于所定义域的有效范围。•●相容性(consistency)是指表示同一事实的两个数据应当一致,不一致即是不相容。第7章数据库安全性与完整性:7.2数据库完整性7.2数据库完整性7.2.1完整性基本概念(1)•2.完整性约束条件•①静态属性级约束•②静态元组级约束•③静态关系级约束•④动态属性级约束•⑤动态元组级约束•⑥动态关系级约束第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(2)第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(3)粒度状态属性列级元组级关系表级静态静态属性列级约束属性列定义●类型●格式●值域●空值静态元组级约束元组值应满足条件静态关系表级约束●实体完整性约束●参照完整性约束●函数依赖约束●统计约束动态动态属性列级约束改变属性列或者属性值动态元组级约束元组新旧值之间满足条件动态关系表级约束关系新旧状态间应满足的约束条件•(1)实体完整性规则•当属性A是基本关系R的主属性时,属性A不能取空值第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(4)•(2)参照完整性规则•如果属性或属性组F是基本表R的外键,它与基本表S的主键Ks相对应(这里R和S不一定是两个不同的关系),则对于R中每个元组在F上的取值应当满足:•●或者取空值,即F的每个属性值均为空值。•●或者等于S中某个元组的主键值。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(5)•例7-8学生实体和课程实体可以用关系S和C表示:•S(S#,Sn,Se,Sa,C#)•C(C#,Cn)•其中,S#,Sn,Sex,Sa,C#,Cn分别表示属性:学号、姓名、性别、年龄、课程号和课程名;而带下划线的属性表示主键。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(6)•这两个关系存在属性的引用。关系S引用关系C的主键“C#”。关系S中的“C#”必须是确实存在的课程编号,即为关系C中该课程的记录,而关系S中的“C#”属性必须参照关系C中的“C#”属性取值。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(7)•此时,参照关系是C,依赖关系是S。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(8)依赖关系SC#参照关系C此时,依赖关系S中每个元组的C#只能取下面两类值:●空值:表示尚未给该学生分配课程。●非空值:此时该值应当是关系C中某个元组的课程号,它表示该学生不能分配到一个未开设的课程,即参照关系C中一定存在一个元组,其主键值等于依赖关系S中的外键值。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(9)•例7-9设有下面三个关系:•S(S#,Sn,Se,Sa,C#)•C(C#,Cn)•SC(S#,C#,G)•其中,S和C是上例中的学生关系和课程关系,而SC是学生课程关系,属性“G”表示课程成绩。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(10)•在这3个关系间也存在着属性引用联系。SC引用S的主键“S#”和C的主键“C#”。这样,SC中的S#必须是真正存在的学号,即S中应当有该学生的记录;SC中的“C#”也必须是确实存在的课程号,即C中应当有该门课程的记录。这也就是说,关系SC中某些属性的取值需要参照关系S和关系C的属性方可进行第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(11)•此时,关系SC的“S#”属性与关系S中主键“S#”相对应,关系SC中“C#”属性与关系C中的主键“C#”相对应,因此,“S#”和“C#”是关系SC的外键,这里SC是依赖关系,而S和C均是参照关系,第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(12)C#S#参照关系S依赖关系SC参照关系C•依赖关系SC中S#和C#可以取两类值:空值和已经存在的值。由于S#和C#都是关系SC的主属性,依照实体完整性规则,它们均不能取空值,所以依赖关系SC中的S#和C#属性实际上只能取相应参照关系S和C中已经存在的主键值。第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(13)•(3)用户完整性规则•实体完整性规则和参照完整性规则适用于任何关系数据库库系统,即是关系数据库必需遵守的规则,任何一个RDBMS都必须支持。根据具体应用环境不同,不同的关系数据库往往还需要一些相应的特殊完整性约束条件,这就是用户定义的完整性约束规则第7章数据库安全性与完整性:7.2数据库完整性7.2.1完整性基本概念(14)•1.完整性约束控制功能•①定义功能•②检查功能•③处理功能第7章数据库安全性与完整性:7.2数据库完整性7.2.2完整性控制(1)•2.参照完整性实现策略•实体完整性规则在三类完整性约束规则中最为基本,但实现起来相对简单,即DBMS需要提供主键值不得为空的机制。参照完整性规则和用户自定义完整性规则涉及因素较多,呈现出相对复杂的情形。用户自定义完整性需要考虑不同的应用实际,不可能有统一的范式,而参照完整性处在抽象语义层面,可以一般研究其实现的各种基本策略。第7章数据库安全性与完整性:7.2数据库完整性7.2.2完整性控制(2)•(1)依赖关系中外键空值问题•在外键取空值问题上,存在两种情况:•①如果依赖关系的外键是其主键组成部分,由实体完整性规则,此时外键值不允许取空值。•②如果依赖关系的外键不是主键的组成部分,则可以根据具体的语义环境确定外键值是否允许空值。第7章数据库安全性与完整性:7.2数据库完整性7.2.2完整性控制(3)•(2)参照关系中删除元组问题•①级联删除(CascadesDelete)就是将依赖关系中所有外键值及参照关系中要删除元组主键值相同的元组一起删除。在例7-9中,删除参照关系S中S#=03001的元组同时,将依赖关系SC中4个S#=03001的元组一起删除。如果参照关系同时又是另一个关系的依赖关系,则这种删除关系操作会持续级联下去。第7章数据库安全性与完整性:7.2数据库完整性7