第5章数据库完整性与安全性1、什么就是数据库得完整性?什么就是数据库得安全性?两者之间有什么区别与联系?解:数据库得完整性就是指数据库中数据得正确性、有效性与相容性,其目得就是防止不符合语义、不正确得数据进入数据库,从而来保证数据库系统能够真实得反映客观现实世界。
数据库安全性就是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据得完整性与安全性就是两个不同得概念,但就是有一定得联系:前者就是为了防止数据库中存在不符合语义得数据,防止错误信息得输入与输出,即所谓垃圾进垃圾出所造成得无效操作与错误结果.后者就是保护数据库防止恶意得破坏与非法得存取。
也就就是说,安全性措施得防范对象就是非法用户与非法操作,完整性措施得防范对象就是不合语义得数据。
2、什么就是数据库得完整性约束条件?完整性约束条件可以分为哪几类?解:完整性约束条件就是指数据库中得数据应该满足得语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
静态列级约束就是对一个列得取值域得说明,包括以下几个方面:①数据类型得约束,包括数据得类型、长度、单位、精度等;②对数据格式得约束;③对取值范围或取值集合得约束;④对空值得约束;⑤其她约束。
静态元组约束就就是规定组成一个元组得各个列之间得约束关系,静态元组约束只局限在单个元组上。
静态关系约束就是在一个关系得各个元组之间或者若干关系之间常常存在各种联系或约束。
常见得静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束。
动态列级约束就是修改列定义或列值时应满足得约束条件,包括下面两方面:①修改列定义时得约束;②修改列值时得约束。
动态元组约束就是指修改某个元组得值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
动态关系约束就是加在关系变化前后状态上得限制条件,例如事务一致性、原子性等约束条件。
3、试述DBMS如何实现完整性控制。
解:为了维护数据库得完整性,DBMS提供了以下三种机制:①完整性约束条件定义完整性约束条件也称为完整性规则,就是数据库中得数据必须满足得语义约束条件。
SQL标准使用了一系列概念来描述完整性,包括关系模型得实体完整性、参照完整性与用户定义完整性。
这些完整性一般由SQL得DDL语义来实现。
它们作为数据库模式得一部分存入数据字典中。
②完整性检查方法检查数据就是否满足已定义得完整性约束条件称为完整性检查。
一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。
检查这些操作执行后数据库中得数据就是否违背了完整性约束条件.③违约处理若发现用户操作违背了完整性约束条件,应采取一定得措施,如拒绝(NOACTION)执行该操作,或级连(CASCADE)执行其它操作,进行违约处理以保证数据得完整性。
4、现有以下四个关系模式:供应商(供应商编号,姓名,电话,地点),其中供应商编号为主码;零件(零件编号,零件名称,颜色,重量),其中零件编号为主码;工程(工程编号,工程名称,所在地点),其中工程编号为主码;供应情况(供应商编号,零件编号,工程编号,数量),其中供应商编号,零件编号,工程编号为主码用SQL语句定义这四个关系模式,要求在模式中完成以下完整性约束条件得定义:①定义每个模式得主码;②定义参照完整性;③定义零件重量不得超过100千克。
解:CREATE SCHEMA Supplier_schemaCREATE TABLE Supplier(Sno CHAR(5) PRIMARY KEY,Sname CHAR(20)NOT NULL,Phone CHAR(13),Address CHAR(30));CREATESCHEMA Part_schemaCREATE TABLEPart(PnoCHAR(7)PRIMARY KEY,PnameCHAR(20) NOT NULL,Color CHAR(10),WeightSMALLINT CHECK(Weight <=100));CREATE SCHEMA Project_schemaCREATE TABLEProject( JnoCHAR(7)PRIMARYKEY,Jname CHAR(20)NOT NULL,Jaddress CHAR(30));CREATESHEMA SPJ_shemaCREATE TABLESPJ( Sno CHAR(5),Pno CHAR(7),Jno CHAR(7),QuantitySMALLINT,PRIMARY KEY(Sno,Pno,Jno),FOREIGN KEY (Sno)REFERENCESSupplier(Sno),FOREIGN KEY (Pno) REFERENCESPart(Pno),FOREIGN KEY (Jno) REFERENCESProject(Jno));5、在关系数据库系统中,当操作违反实体完整性、参照完整性与用户自定义得完整性约束条件时,一般就是如何分别进行处理得。
解:(1) 按实体完整性规则自动进行检查。
包括:①检查主码值就是否唯一,如果不唯一则拒绝插入或修改.②检查主码得各个属性就是否为空,只要有一个为空就拒绝插入或修改.(2)按参照完整性检查,违约处理得策略如下:①拒绝(NO ACTION)执行。
不允许该操作执行,该策略一般设置为默认策略。
在被参照关系中删除元组:仅当参照关系中没有任何元组得外码值与被参照关系中要删除元组得主码值相同时,系统才执行删除操作,否则拒绝此操作.②级联(CASCADE)操作. 当删除或修改被参照表得一个元组造成了与参照表得不一致,则删除或修改参照表中得所有造成不一致得元组。
级联操作必须在定义外码时给出显式定义。
③设置为空值(SETNULL)。
当删除或修改被参照表得一个元组时造成了不一致,则将参照表中得所有造成不一致得元组得对应属性设置为空值。
④置空值删除(NULLIFIES)。
删除被参照关系得元组,并将参照关系中相应元组得外码值置空值。
(3)按用户自定义完整性检查,违约处理:当往表中插入元组或修改属性得值时,RDBMS就检查属性上得约束条件就是否被满足,如果不满足则操作被拒绝执行.6、触发器得作用就是什么?同一表上得多个触发器被激活时遵循得执行顺序就是什么?解:触发器就是用户定义在关系表上得一类由事件驱动得特殊过程,它不需要由用户调用执行,而就是在用户对表中得数据进行UPDATE、INSERT或DELETE操作时自动触发执行。
它可以实现数据库中相关表得级联修改,能实现比CHECK语句更为复杂得约束,能提供数据库修改前后数据变化得前后状态,能维护非规范化数据。
同一表上得多个触发器激活时遵循以下执行顺序:①执行该表上得BERORE触发器;②激活触发器得SQL语句;③执行该表上得AFTER触发器。
此外,对于同一个表上得多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”得原则,即按照触发器创建得时间先后顺序执行。
有些RDBMS就是按照触发器名称得字母排序顺序来执行触发器得。
7、什么就是“权限”?用户访问数据库有哪些权限?对数据模式进行修改有哪些权限?解:用户(或应用程序)使用DB得方式称为权限。
用户访问数据库有四种权限:Read(读权限)、Insert(插入)、Update(修改)与Delete(修改).用户对数据模式进行修改有四种权限:Index(索引权限:允许用户创建与删除索引),Resource(资源权限:允许用户创建新得关系)、Alteration(修改权限:允许用户在关系结构中加入或删除属性)与Drop(撤销权限:允许用户撤销关系).8、安全性措施中得强制存取控制就是如何实现得?解:对每个数据对象赋予一定得密级,级别从高到低有:绝密级、机密级、秘密级、公用级,每个用户也具有相应得级别,称为许可证级别,密级与许可证级别都就是有序得,如绝密>机密>秘密〉公用,采用规则就是:一就是用户只能查瞧比它级别低或就是同级得数据,二就是用户只能修改与它同级得数据。
9、SQL提供了哪些数据控制语句?举例说明.解:数据控制语言就是用来设置或者更改数据库用户或角色权限得语句。
SQL中,这些语句包括GRANT、REVOKE等语句。
GRANT语句向用户授予权限,REVOKE语句收回授予得权限.例如:描述把查询Course表得权限授予所有用户得控制语句为GRANT SELECT ON Course TO PUBLIC;描述收回用户U3修改学生学号得查询权限得控制语句为:REVOKEUPDA TE(Sno)ON TABLE StudentFROMU3;10、使用角色有什么好处?涉及角色得SQL语句有哪些?解:使用角色得好处:数据库角色就是指被命名得一组与数据库操作相关得权限。
角色就是权限得集合,可以为一组具有相同权限得用户创建一个角色,角色简化了授权操作。
使用角色进行授权必须先创建角色,将数据库对象上得存取权限授予角色,才能将角色授予用户,使得用户拥有角色所具有得所有存取权限.对一个角色授予、拒绝或废除得权限也适用于该角色得任何成员.涉及角色得SQL语句有:角色得创建CREATEROLE 〈角色名>给角色授权GRANT<权限>[,〈权限〉]…ON <对象类型>对象名TO<角色〉[,<角色>]…将一个角色授予其它得角色或用户GRANT 〈角色1>[,<角色2>]…TO<角色3>[,〈用户1〉]…[WITH ADMIN OPTION]角色权限得收回REVOKE〈权限>[,<权限〉]…ON〈对象类型><对象名〉FROM 〈角色〉[,〈角色〉]…11、现有以下两个关系模式:雇员(员工号,姓名,年龄,工资,部门号,职务)部门(部门号,名称,经理名,电话)使用SQL提供得功能完成如下操作:①允许WangHong对两个关系进行任何操作,并可以将她得权限转授她人。
②允许所有用户查询部门关系.③允许所有用户查询雇员关系中除员工号、年龄与工资之外得所有属性.④允许LiLan对雇员关系中得工资属性进行修改。
⑤定义一个角色Manager,可以对部门关系进行任何操作,对雇员关系除了不能修改工资外,可以进行任何操作。
⑥SongHua就是秘书,拥有角色Manager得权限.⑦收回①~④得授权。
⑧不允许角色Manager修改雇员得职务属性值.解:①允许WangHong对两个关系进行任何操作,并可以将她得权限转授她人:GRANT ALLPRIVILEGESON TABLE雇员,部门TOWangHong;WITHGRANT OPTION;②允许所有用户查询部门关系:GRANT SELECT ON TABLE部门TOPUBLIC;③允许所有用户查询雇员关系中除员工号、年龄与工资之外得所有属性:GRANT SELECT(姓名,部门号,职务)ON TABLE雇员TOPUBLIC;④允许LiLan对雇员关系中得工资属性进行修改:GRANT UPDATE(工资) ON TABLE部门TO LiLan;⑤定义一个角色Manager,可以对部门关系进行任何操作,对雇员关系除了不能修改工资外,可以进行任何操作:CREATE ROLE Manager;GRANTALL PRIVILEGESONTABLE雇员,部门TOWangHong;REVOKE UPDATE(工资) ON TABLE部门FROM Manager;⑥SongHua就是秘书,拥有角色Manager得权限:GRANTManagerTO SongHua;⑦收回(1)~(4)得授权.REVOKE ALLPRIVILEGESONTABLE雇员, 部门FROMWangHong;REVOKE SELECT ON TABLE部门FROM PUBLIC;REVOKESELECT(姓名,部门号,职务)ONTABLE雇员FROM PUBLIC;REVOKE UPDATE(工资)ON TABLE部门FROMLiLan;⑧不允许角色Manager修改雇员得职务属性值:REVOKEUPDATE(职务) ONTABLE雇员FROM Manager;。