1、并发控制并发控制1、并发操作可能出现的问题、并发操作可能出现的问题2、并发控制方法、并发控制方法封锁技术封锁技术(1)锁的类型)锁的类型(2)封锁粒度)封锁粒度(3)活锁和死锁)活锁和死锁3、SQL Server的封锁机制的封锁机制 7.5 7.5 数据库安全性数据库安全性教学要求:教学要求:了解数据库系统安全性所涉及的内容,了解数据库系统安全性所涉及的内容,掌握数据库安全性控制的常用方法以及掌握数据库安全性控制的常用方法以及SQL Server中安全性控制机制和控制策略。中安全性控制机制和控制策略。教学重点:教学重点:数据库中维护安全性的机制数据库中维护安全性的机制7.5.1 问题的提出问题
2、的提出7.5.2 数据库安全性控制概述数据库安全性控制概述7.5.3 SQL ServerSQL Server的安全性机制的安全性机制7.5.4 SQL Server7.5.4 SQL Server访问控制策略访问控制策略7.5.5 统计数据库的安全性统计数据库的安全性 7.5.1 问题的提出问题的提出数据库的一大特点是数据可以共享数据库的一大特点是数据可以共享数据不能是无条件的共享数据不能是无条件的共享 例:例:教学管理教学管理、银行储蓄数据、军事秘密、银行储蓄数据、军事秘密、国家机密、新产品实验数据、市场营销策略、销国家机密、新产品实验数据、市场营销策略、销售计划等。售计划等。数据共享给数
3、据库带来的问题数据共享给数据库带来的问题安全性问题安全性问题数据库的安全性:数据库的安全性:防止不合法访问数据库造成数据泄防止不合法访问数据库造成数据泄露、更改或破坏露、更改或破坏7.5.2 数据库安全性控制概述数据库安全性控制概述一、数据库系统安全性涉及到哪些方面?一、数据库系统安全性涉及到哪些方面?计算机系统计算机系统三类安全性问题:技术安全类、管理三类安全性问题:技术安全类、管理安全类、政策法律类安全类、政策法律类数据库系统数据库系统引进了数据库的计算机系统引进了数据库的计算机系统,安全性,安全性涉及到计算机的涉及到计算机的物理层、使用人员、操作系统物理层、使用人员、操作系统、网网络层以
4、及数据库管理系统本身等多个方面。络层以及数据库管理系统本身等多个方面。物理层:物理层:防止入侵者强行进入或暗中潜入破坏物理文件防止入侵者强行进入或暗中潜入破坏物理文件人员层:人员层:严格控制用户的授权。严格控制用户的授权。操作系统层:操作系统层:OS安全对数据库存在着很大的威胁。安全对数据库存在着很大的威胁。网络层:网络层:为数据库系统的安全提供一个保障为数据库系统的安全提供一个保障DBMS层:层:DBMS有完善的访问控制机制。有完善的访问控制机制。1、用户标识和鉴定、用户标识和鉴定 系统提供的最外层安全保护措施。其方法是由系统提供的最外层安全保护措施。其方法是由系统提供一定的方式让用户标识自
5、己的身份。每次系统提供一定的方式让用户标识自己的身份。每次用户要求进入系统时,由系统进行身份核对,通过用户要求进入系统时,由系统进行身份核对,通过鉴定后才有使用权。鉴定后才有使用权。缺点:缺点:用户名和口令易被窃取用户名和口令易被窃取。二、数据库安全性控制的常用方法二、数据库安全性控制的常用方法 分为自主存取控制和强制存取控制方法分为自主存取控制和强制存取控制方法1)自主存取控制方法()自主存取控制方法(DAC)由用户由用户自主决定自主决定对数据库对象的操作权限,用对数据库对象的操作权限,用户可以对哪些对象进行操作,完全取决于用户之间户可以对哪些对象进行操作,完全取决于用户之间的的授权授权(通
6、过通过 GRANT 和和 REVOKE 语句实现)。语句实现)。SQL Server存取控制属于自主存取控制方法。存取控制属于自主存取控制方法。例:将成绩表例:将成绩表SC的查询权限授予给的查询权限授予给student用户用户 grant select on sc to student2、存取控制存取控制2)强制存取控制方法()强制存取控制方法(MAC)为每一个数据库对象标以一定的密级,对每一为每一个数据库对象标以一定的密级,对每一个用户确定一个许可级别,不同级别的用户拥有的个用户确定一个许可级别,不同级别的用户拥有的数据库的操作权限不同。数据库的操作权限不同。优点:用户不能直接感知或进行权限
7、控制,保证了优点:用户不能直接感知或进行权限控制,保证了更高程度的安全性。更高程度的安全性。适用于对数据有严格而固定密级分类的部门,适用于对数据有严格而固定密级分类的部门,如:如:军事部门、政府部门等。军事部门、政府部门等。3、数据库角色、数据库角色角色:角色:被命名的一组与数据库操作相关的权限。被命名的一组与数据库操作相关的权限。可以为一组具有相同权限的用户创建一个角色。可以为一组具有相同权限的用户创建一个角色。简化授权的过程。简化授权的过程。例:例:T_role角色具有对成绩表的查询、修改和删除权限。角色具有对成绩表的查询、修改和删除权限。如果某教师如果某教师(用户用户)希望得到对成绩表的
8、查询、修改和删除希望得到对成绩表的查询、修改和删除权限,则可直接将权限,则可直接将T_role授予给该某教师。授予给该某教师。注意:不同的注意:不同的DBMS对角色操作的对角色操作的SQL语句略有不同语句略有不同 4、视图机制、视图机制目的:目的:把要保密的数据对无权存取这些数据的用户隐把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护。藏起来,对数据提供一定程度的安全保护。主要功能是提供数据独立性。主要功能是提供数据独立性。间接实现了用户权限定义。间接实现了用户权限定义。例例 建立计算机系学生的视图,把该视图的查询权限授于建立计算机系学生的视图,把该视图的查询权限授
9、于S。CREATE VIEW CS_Student AS SELECT *FROM Student WHERE deptno=CS;GRANT SELECT ON CS_Student TO S;5、审计、审计审计:审计:DBMS提供的提供的一种可以记录下对数据库的所有一种可以记录下对数据库的所有操作活动和轨迹的操作活动和轨迹的可选可选功能。功能。将用户对数据库的所有操作记录在审计日志上。将用户对数据库的所有操作记录在审计日志上。DBA利用审计日志找出非法存取数据的人、时间利用审计日志找出非法存取数据的人、时间和内容和内容用户级审计和系统级审计用户级审计和系统级审计用户级审计:用户级审计:用户
10、针对自己创建的数据库表或视图用户针对自己创建的数据库表或视图进行审计进行审计。记录所有用户对这些表或视图的一。记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型切成功和(或)不成功的访问要求以及各种类型的的SQL操作。操作。系统级审计系统级审计:DBA设置。监测成功或失败的登录设置。监测成功或失败的登录要求要求,监测,监测GRANT和和REVOKE操作以及其他数操作以及其他数据库级权限下的操作。据库级权限下的操作。6、用户自定义安全性、用户自定义安全性 可以通过触发器或存储过程实现自定义安全性。可以通过触发器或存储过程实现自定义安全性。例:假设在例:假设在MIS系统中,对
11、工资表的修改必须是在上系统中,对工资表的修改必须是在上班时间(星期一到星期五的班时间(星期一到星期五的9:00-17:00),其余时间其余时间的插入和修改均库无效。的插入和修改均库无效。可以用如下的触器可以用如下的触器create trigger secur_zgon 职工职工 for insert,update,delete asif datename(weekday,getdate()=星期六星期六 or datename(weekday,getdate()=星期日星期日 or(convert(int,datename(hour,getdate()not between 9 and 17)
12、begin raiserror(只允许在工作时间操作数据只允许在工作时间操作数据!,16,1)rollback transactionend例:例:某企业的数据库应用系统中用户类型如下:某企业的数据库应用系统中用户类型如下:管理员:管理员:对数据库的所有数据进行操作和维护。对数据库的所有数据进行操作和维护。生产部门用户:生产部门用户:对生产数据有查询、修改、插入和删除对生产数据有查询、修改、插入和删除权限。权限。销售部门用户:销售部门用户:对订单数据有查询、修改和删除权限。对订单数据有查询、修改和删除权限。劳资用户:劳资用户:对人事、工资数据有查询、修改、插入和删对人事、工资数据有查询、修改、
13、插入和删除权限。除权限。普通职工:普通职工:对自己的工资、产品信息具有查询权。对自己的工资、产品信息具有查询权。如何实现该系统的安全性?如何实现该系统的安全性?可以按以下策略设计可以按以下策略设计:1)建立登录用户,并授予为数据库用户建立登录用户,并授予为数据库用户.2)对用户进行分类授权:对用户进行分类授权:可直接对各类用户授以相应可直接对各类用户授以相应的权限,的权限,也也可以用角色授权,即,首先创建多个角可以用角色授权,即,首先创建多个角色,将各类用户色,将各类用户拥有的拥有的权限授予不同角色,再将角权限授予不同角色,再将角色授予给相应的用户。色授予给相应的用户。3)对于职工,可以用视图
14、或存储过程实现权限管理。)对于职工,可以用视图或存储过程实现权限管理。4)可以用触发器,也可以用审计功能实现对数据操作)可以用触发器,也可以用审计功能实现对数据操作的监控,以防渎职现象的发生。的监控,以防渎职现象的发生。7.5.3 SQL Server7.5.3 SQL Server的安全性机制的安全性机制SQL ServerSQL Server的安全性机制可分为下图所示的安全性机制可分为下图所示4 4个等级:个等级:数据库数据库用户用户客户机客户机SQL Server服务器服务器客户操作系客户操作系统安全性统安全性SQL Server登录安全性登录安全性数据库的数据库的使用安全性使用安全性数
15、据库对象的数据库对象的使用安全性使用安全性 数据库对象数据库对象用户首先要登录到客户端用户首先要登录到客户端的操作系统中的操作系统中提供口令和密码才能登录到提供口令和密码才能登录到SQL Server服务器服务器具有访问数据库的权限具有访问数据库的权限具有访问数据库对象的具有访问数据库对象的权限权限7.5.4 SQL Server7.5.4 SQL Server访问控制策略访问控制策略 SQL Server的用户通过授权获得对数据的访问权的用户通过授权获得对数据的访问权限。限。其访问控制分为如下两阶段:其访问控制分为如下两阶段:安全帐户认证安全帐户认证:判定用户是否有权连接到服务器:判定用户是
16、否有权连接到服务器并向服务器发送并向服务器发送SQL命令。命令。访问许可确认访问许可确认:判定是否有对数据库的访问权限判定是否有对数据库的访问权限1 1、SQL ServerSQL Server的的安全帐户认证安全帐户认证方式及认证模式方式及认证模式1)1)身份验证方式身份验证方式用户必须通过用户必须通过身份验证身份验证才能连接才能连接到到SQL Server中。中。SQL Server有两种身份验证方式有两种身份验证方式:集成验证方式(集成验证方式(Windows身份认证方式):身份认证方式):用户通过用户通过windows的身份验证后,不必提供的身份验证后,不必提供SQL Server的的
17、Login账号和口令就自动进行账号和口令就自动进行SQL Server身份验证。身份验证。标准身份验证方式(标准身份验证方式(SQL Server身份验证方式):身份验证方式):由数由数据库管理系统独立来管理自己的数据库安全。登录时,据库管理系统独立来管理自己的数据库安全。登录时,必须提供必须提供SQL Server自己的登录账号和口令自己的登录账号和口令 2)SQL Server2)SQL Server的身份认证模式的身份认证模式Windows身份验证模式:用身份验证模式:用Windows身份验证方身份验证方式登录;式登录;混合模式混合模式:可以用:可以用Windows 身份验证方式身份验证
18、方式,也可,也可以用以用 SQL Server 身份验证方式身份验证方式注意:如果在注意:如果在win 98下安装的桌面版下安装的桌面版SQL Server,只能用只能用SQL Server 身份验证方式登录。身份验证方式登录。3)3)安全帐户管理安全帐户管理可用可用T-SQL语句语句和和企业管理器企业管理器管理数据库帐户管理数据库帐户(服务服务器登录标识器登录标识)特殊帐户特殊帐户sa:SQL Server完成安装以后,建立了完成安装以后,建立了sa。sa帐户拥有最高的管理权限,可以执行服务帐户拥有最高的管理权限,可以执行服务器范围内的所有操作。器范围内的所有操作。(1(1)windows
19、windows 安全模式用户管理安全模式用户管理:sp_grantlogin sp_grantlogin:授予授予Windows NTWindows NT用户或组连接用户或组连接SQL SQL ServerServer服务器服务器sp_denyloginsp_denylogin:禁止用户或组连接到禁止用户或组连接到SQL ServerSQL Server服务器服务器例:例:sp_grantlogin jxgluserssp_grantlogin jxglusers 注意:注意:对于没有建立对于没有建立Windows NTWindows NT帐户的用户,只能使用帐户的用户,只能使用SQL SQL
20、 ServerServer登录标识来管理用户连接。或首先建立登录标识来管理用户连接。或首先建立Windows NTWindows NT帐帐户户,再用再用sp_grantloginsp_grantlogin授予其连接授予其连接SQL ServerSQL Server服务器的权限服务器的权限SQL ServerSQL Server中用于用户管理的中用于用户管理的SQLSQL语句语句(2)SQL Server身份验证模式身份验证模式sp_addlogin:创建登录用户创建登录用户sp_password:改变用户的口令改变用户的口令sp_grantdbaccess:授权某个登录用户为数据库用户授权某个
21、登录用户为数据库用户例:例:sp_addlogin users,users 2 2 访问许可确认访问许可确认访问许可确认:访问许可确认:用户连接到用户连接到SQL Server服务器后,系统判断服务器后,系统判断其是否拥有对数据库的访问许可权。其是否拥有对数据库的访问许可权。授予授予用户的权限决定其对数据库所能执行的操作。用户的权限决定其对数据库所能执行的操作。安全帐户认证和访问许可确认的区别:安全帐户认证和访问许可确认的区别:安全帐户认证决定用户能否向安全帐户认证决定用户能否向SQL Server服务器发送服务器发送SQL命令命令;访问许可确认决定用户能在数据库中执行哪些访问许可确认决定用户
22、能在数据库中执行哪些SQL语句。语句。1 1)SQL Server中的中的角色角色标准角色标准角色应用程序角色应用程序角色固定角色固定角色用户自定义角色用户自定义角色public角色角色SQL Server角色角色固定服务器角色固定服务器角色固定数据库角色固定数据库角色固定角色固定角色 固定角色固定角色:SQL Server预先定义的角色。预先定义的角色。所拥有所拥有的权限涉及到服务器配置、服务器和数据库的访问控制的权限涉及到服务器配置、服务器和数据库的访问控制等。等。用户只有加入固定角色才能获其特殊的许可权限。用户只有加入固定角色才能获其特殊的许可权限。根据根据所作用的级别不同所作用的级别不
23、同,划分为:,划分为:固定服务器角色:固定服务器角色:SQL Server在安装时就已经创建好在安装时就已经创建好用于分配服务器管理权限的实体。用于分配服务器管理权限的实体。固定数据库角色固定数据库角色:设置在数据库级,提供最基本的数据:设置在数据库级,提供最基本的数据库权限的综合管理库权限的综合管理sysadminsysadmin:固定:固定服务器服务器角色,角色,能够在服务器上执行所能够在服务器上执行所有操作。有操作。db_owner:固定数据库角色,固定数据库角色,拥有数据库最高权限。拥有数据库最高权限。用用sp_addsrvrolemember可可将固定服务器角色分配给将固定服务器角色
24、分配给某登录帐户。某登录帐户。sp_addrolemember可可将某个登录帐户将某个登录帐户加入某个固定数据库角色。加入某个固定数据库角色。例:例:sp_addsrvrolemember zzg sysadmin用用 sp_addrolemember db_owner,zzg主要的固定角色主要的固定角色 publicpublic角色:角色:每个数据库均具有这一角色,数据每个数据库均具有这一角色,数据库的所有用户自动属于库的所有用户自动属于public角色,并且不能角色,并且不能从从public角色中删除。与固定角色一样,角色中删除。与固定角色一样,public角色也不能被用户删除。角色也不能
25、被用户删除。用户自定义角色:用户自定义角色:SQL Server中中sysadmin、db_owner等固定角色中的成员可以自定义数据等固定角色中的成员可以自定义数据库角色。库角色。可以用可以用SQL语句和语句和Enterprise Manager管理管理用户自定义角色。用户自定义角色。SQL Serer中对角色管理的中对角色管理的SQL语句:语句:1)角色的创建:)角色的创建:sp_addrole2)给角色授权:)给角色授权:GRANT ON 对象名对象名 TO,3)将一个角色授予给其他的角色或用户:)将一个角色授予给其他的角色或用户:sp_addrolemember4)角色权限的收回)角色
26、权限的收回 REVOKE ON FROM,5)取消用户的角色)取消用户的角色:sp_droprolemember例例通过角色实现将一组权限授予一个用户。通过角色实现将一组权限授予一个用户。步骤如下:步骤如下:1)sp_addrole R1;2)GRANT SELECT,UPDATE,INSERT ON Student TO R1;3)sp_addrolemember R1,zhou4)revoke update on student from R15)sp_droprolemember R1,zcx;应用程序角色应用程序角色应用程序角色应用程序角色:是:是SQL Server中另一种访问控制中
27、另一种访问控制实现方法,它实现方法,它是根据用户所运行的应用程序决定是根据用户所运行的应用程序决定当前应用程序能否连接和访问数据库对象。当前应用程序能否连接和访问数据库对象。使用应用程序角色的原因:见教材使用应用程序角色的原因:见教材主在使用方法:主在使用方法:请同学们查阅相关资料请同学们查阅相关资料4 4)权限设置)权限设置语句权限:语句权限:决定用户能否操作数据库和创建数据库对决定用户能否操作数据库和创建数据库对象,如表、视图、存储过程、默认和规则等。主要有象,如表、视图、存储过程、默认和规则等。主要有 CREATE TABLE、CREATE VIEW、BACKUP DATABASE等语句
28、权限。等语句权限。对象权限:对象权限:决定用户对数据库对象所执行的操作,控决定用户对数据库对象所执行的操作,控制用户在表和视图上执行制用户在表和视图上执行SELECT、INSERT、UPDATE、DELETE语句以及执行存储过程的能力。语句以及执行存储过程的能力。例:例:某企业开发一个数据库应用系统,系统中有用户:某企业开发一个数据库应用系统,系统中有用户:系统管理员:系统管理员:对数据库的所有数据进行操作和维护。对数据库的所有数据进行操作和维护。生产部门用户:生产部门用户:对生产计划表等数据具有查询、修改、插入和对生产计划表等数据具有查询、修改、插入和删除等权限。删除等权限。销售部门用户:销
29、售部门用户:对订单数据有查询、修改和删除权限。对订单数据有查询、修改和删除权限。劳资用户:劳资用户:对人事、工资具有查询、修改、插入和删除权限。对人事、工资具有查询、修改、插入和删除权限。普通职工:普通职工:对自己的工资、对企业的生产以及产品信息具有查对自己的工资、对企业的生产以及产品信息具有查询权。询权。如何实现该系统的安全性?如何实现该系统的安全性?答答:1)建立登录用户,并授予为数据库用户建立登录用户,并授予为数据库用户 sp_addlogin manager sp_addlogin scgl sp_grantdbaccess scgl .2)可直接为用户授权;也可以通过角色授权)可直接
30、为用户授权;也可以通过角色授权 Sp_addrole scgl_role .grant select,update,delete,insert on 生产计划表生产计划表 to scgl_role .3)职工权限管理:用视图实现)职工权限管理:用视图实现 为各个用户创建一个视图,将该视图的查询权限授予给为各个用户创建一个视图,将该视图的查询权限授予给相应的用户。相应的用户。Create view zg1 as Select*from 职工表职工表 where 职工号职工号=001 Grant select on zg1 to zg001 也可以用存储过程实现其权限管理也可以用存储过程实现其权限
31、管理 创建存储过程:创建存储过程:create proc P_gz zgh char as Select*from 职工表职工表 where 职工号职工号zgh 将存储过程的执行权限授予给职工。将存储过程的执行权限授予给职工。7.5.5 7.5.5 统计数据库的安全性统计数据库的安全性统计数据库统计数据库允许用户查询允许用户查询聚集聚集类型的信息(如合计、平均值等)类型的信息(如合计、平均值等)不允许查询不允许查询单个单个记录信息记录信息 例如,一个单位的人均工资数可以公开查寻,而每个人例如,一个单位的人均工资数可以公开查寻,而每个人的工资数要保密。的工资数要保密。统计数据库中特殊的安全性问题
32、统计数据库中特殊的安全性问题 隐蔽的信息通道隐蔽的信息通道 能从合法的查询中推导出不合法的信息能从合法的查询中推导出不合法的信息策略:策略:1:任何查询至少要涉及:任何查询至少要涉及N(N足够大足够大)个以上的记录个以上的记录2:任意两个查询的相交数据项不能超过:任意两个查询的相交数据项不能超过M个个3:任一用户的查询次数不能超过:任一用户的查询次数不能超过1+(N-2)/M7.6.1 7.6.1 数据库完整性简述数据库完整性简述7.6.2 7.6.2 完整性约束条件的分类完整性约束条件的分类7.6.3 7.6.3 关系模型的完整性约束关系模型的完整性约束7.6 7.6 数据库完整性数据库完整
33、性教学内容:教学内容:DBMS提供的数据完整性机制、数据完整性约束提供的数据完整性机制、数据完整性约束条件的分类及实现方法。条件的分类及实现方法。重点:重点:数据完整性约束条件的分类及实现方法。数据完整性约束条件的分类及实现方法。7.6.1 7.6.1 数据库完整性简述数据库完整性简述数据库的完整性:数据的数据库的完整性:数据的正确性正确性和和相容性相容性数据的完整性和安全性的区别:数据的完整性和安全性的区别:数据的完整性数据的完整性防止数据库中存在不正确的数据防止数据库中存在不正确的数据防范对象:不合语义的、不正确的数据防范对象:不合语义的、不正确的数据数据的安全性数据的安全性保护数据库防止
34、恶意的破坏和非法的存取保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作防范对象:非法用户和非法操作一个给定的数据库可能受到多个完整性约束的限制,一个给定的数据库可能受到多个完整性约束的限制,约束可能是简单的也可能是复杂的。约束可能是简单的也可能是复杂的。例如:例如:学生的学号必须唯一;学生的学号必须唯一;性别只能为男或女;性别只能为男或女;学生所在的系必须是学校已开设的系。学生所在的系必须是学校已开设的系。为维护数据库的完整性,为维护数据库的完整性,DBMS必须:必须:1.提供定义完整性约束条件的机制提供定义完整性约束条件的机制 2.提供完整性检查的方法及违约处理提供完整性检查
35、的方法及违约处理7.6.2 7.6.2 完整性约束条件的分类完整性约束条件的分类约束条件作用的对象可以是关系、元组和列。约束条件作用的对象可以是关系、元组和列。列约束:列约束:列的类型、取值范围、精度、排序等约列的类型、取值范围、精度、排序等约束条件。束条件。元组的约束:元组的约束:元组中各个字段间的联系的约束。元组中各个字段间的联系的约束。关系的约束:关系的约束:若干元组间、关系集合上以及关系若干元组间、关系集合上以及关系之间的联系的约束。之间的联系的约束。完整性约束条件所涉及的对象的状态可以是完整性约束条件所涉及的对象的状态可以是静态的,静态的,也可以是动态的也可以是动态的。静态约束静态约
36、束:数据库每一确定状态时的数据对象所:数据库每一确定状态时的数据对象所应满足的约束条件。应满足的约束条件。静态列级约束:列的取值域的约束。静态列级约束:列的取值域的约束。静态元组约束:元组各个列之间的约束关系。静态元组约束:元组各个列之间的约束关系。静态关系约束:一个关系的各个元组之间或者多个关静态关系约束:一个关系的各个元组之间或者多个关系之间存在的约束系之间存在的约束动态约束动态约束:数据库从一种状态转变为另一种状态时,:数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件。新、旧值之间所应满足的约束条件。动态列级约束:修改列定义或列值时应满足的约束条件动态列级约束:修改列定
37、义或列值时应满足的约束条件动态元组约束:修改元组时,元组中各字段之间应满足动态元组约束:修改元组时,元组中各字段之间应满足的约束条件的约束条件动态关系约束:加在关系前后状态上的限制条件。动态关系约束:加在关系前后状态上的限制条件。7.6.3 7.6.3 关系模型的关系模型的完整性约束完整性约束一、实体完整性一、实体完整性在在CREATE TABLE中用中用PRIMARY KEY定义定义单属性构成的码时:可定义为单属性构成的码时:可定义为列级或表级约束条件列级或表级约束条件多个属性构成的码时:只能定义为多个属性构成的码时:只能定义为表级约束条件表级约束条件 例例 将将Student表中的表中的S
38、no属性定义为码属性定义为码(1)在列级定义主码在列级定义主码 CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)NOT NULL,Ssex CHAR(2);(2)在表级定义主码在表级定义主码 CREATE TABLE Student(Sno CHAR(9),Sname CHAR(20)NOT NULL,Ssex CHAR(2),PRIMARY KEY(Sno);例例2将将SC表中的表中的Sno,Cno属性组定义为码属性组定义为码 CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHAR(4)
39、NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno);/*只能在表级定义主码只能在表级定义主码*/实体完整性检查和违约处理实体完整性检查和违约处理插入或对主码列进行更新操作时,插入或对主码列进行更新操作时,RDBMS按照实按照实体完整性规则自动进行检查。包括:体完整性规则自动进行检查。包括:1.检查主码值是否唯一检查主码值是否唯一2.检查主码的各个属性是否为空检查主码的各个属性是否为空只要有一个条件不满足就拒绝插入或修改只要有一个条件不满足就拒绝插入或修改二、参照完整性定义二、参照完整性定义在在CREATE TABLE中用中用FOREIGN KEY和和REF
40、ERENCES短语定义短语定义例例 定义定义SC中的参照完整性中的参照完整性 CREATE TABLE SC (Sno CHAR(9)NOT NULL FOREIGN KEY(Sno)REFERENCES Student(Sno),Cno CHAR(4)NOT NULL,Grade SMALLINT,FOREIGN KEY(Cno)REFERENCES Course(Cno);参照完整性检查和违约处理参照完整性检查和违约处理三、用户定义的完整性三、用户定义的完整性CREATE TABLE时定义时定义列值非空(列值非空(NOT NULL)列值唯一(列值唯一(UNIQUE)检查列值是否满足一个布尔
41、表达式(检查列值是否满足一个布尔表达式(CHECK)插入元组或修改属性的值时,插入元组或修改属性的值时,RDBMS检查属性上的检查属性上的约束条件是否满足。如果不满足则操作被拒绝执行约束条件是否满足。如果不满足则操作被拒绝执行例例 建立部门表建立部门表DEPT,如下所示如下所示 CREATE TABLE DEPT (Deptno int check(Deptno=0 and Deptno=50),Dname CHAR(9)UNIQUE,Location CHAR(10)not null);例例 当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以Ms.打头。打头。CREATE TA
42、BLE Student (Sno CHAR(9),Sname CHAR(8)NOT NULL,Ssex CHAR(2),PRIMARY KEY(Sno),CHECK(Ssex=女女 OR Sname NOT LIKE Ms.%);四、触发器四、触发器触发器(触发器(Trigger)是用户定义在关系表上的一类由)是用户定义在关系表上的一类由事件驱动事件驱动的特殊过程的特殊过程可以进行更为复杂的检查和操作,具有更精细和更强大的数可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力据控制能力 定义触发器:定义触发器:CREATE TRIGGER语句定义触发器语句定义触发器执行触发器:由执行触发器:由触发事件激活触发事件激活,数据库服务器自动执行。,数据库服务器自动执行。删除触发器:删除触发器:DROP TRIGGER