填空题部分:
Chp 8 安全性与完整性
part 1:
- 数据库的安全性是指保护数据库以防止不合法的使用所造成的( 数据泄露、更改或破坏 )。
- 计算机系统有三类安全性问题,即( 技术安全 )、管理安全和政策法规。
- 数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权的人员无法接近数据,这主要通过数据库系统的( 存取控制 )机制实现。
- 完整性检查和控制的防范对象( 不正确的数据 ),防止它们进入数据库。安全性控制的防范对象是( 非法操作 ),防止他们对数据库数据的存取。
- TDI/TCSEC标准中关于“安全策略”内容中提出了DAC和( MAC )两种存取控制技术。其中,DAC技术从安全级别( C2 )开始明确提出。
- 用户标识和鉴别的方法有很多种,而且在一个系统中往往是多种方法并举,以获得更强的安全性。常用的方法有通过输入( 用户标识 )和口令来鉴别用户。
- 用户权限是由两个要素组成的:( 数据对象 )和操作类型_ 。
- 在数据库系统中,定义存取权限称为( 授权 )。SQL语言用( grant )语句向用户授予对数据的操作权限,用( revoke )语句收回授予的权限。
- 常用的数据库安全控制的方法和技术有用户标识与鉴别、存取控制、视图机制 、审计和( 数据加密 )等。
- 在强制存取控制(MAC)中,仅当主体的许可证级别( 大于或等于 )客体的密级时,该主体才能读取对应的客体。
- 数据库的( 完整性 )是指数据的正确性和相容性。
- 数据库( 角色 )是被命名的一组与数据库操作相关的权限。
- 触发器(Trigger)是用户定义在关系表上的一类由( 事件 )驱动的特殊过程。
- 完整性检查和控制的防范对象是( 不正确的数据 ),防止它们进入数据库;安全性控制的防范对象是( 非法操作 ),防止他们对数据库数据的存取。
- 实体完整性的违约处理是( 拒绝处理 )。
part2:
- ( 事务 )是并发控制的基本单位
- 事务的一致性是指( 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态 )。
- 事务的( 持续性 )是指事务一旦提交,对数据库的改变是永久的。
- 数据库中一个事务内部的操作及使用的数据不能被其他事务干扰,即并发执行的各个事务不能相互干扰,体现了事务的( 隔离 )特性。
- 多用户的数据库系统的目标之一是使它的每个用户好像面对着一个单用户的数据库一样使用它,为此数据库系统必须进行( 并发控制 )。
- 目前DBMS普遍采用封锁方法实现并发操作调度的可串行性,从而保证调度的正确性,其中封锁对象的大小称为( 封锁的粒度 )。
- 不允许任何其他事务对这个锁定目标再加任何类型的锁是( 排它锁 )。
- 封锁具有三个环节:第一个环节是申请加锁;第二个环节是获得锁 ;第三个环节是( 释放锁 ) 。
- 并发操作可能带来的数据不一致性,最根本的原因是违背了( 隔离性 )。
- 并发操作可能会导致:丢失修改、不可重复读和( 读脏数据 )。
- 解决死锁问题的方法有两类:死锁预防和( 允许发生死锁之后解除 )。
- 为保证数据库的可恢复性,登记日志文件时必须遵循两条原则:一是登记的次序严格按事务执行的时间次序;二是( 先写数据库后写日志文件 )。
- 事务故障的解决办法是恢复程序在不影响其他事务运行的情况下( 撤销该事务 )。
- 日志文件是用来记录对数据库的更新操作的文件。不同的数据库系统采用的日志文件格式不完全相同。日志文件主要有以记录为单位的日志文件和( 以数据块为单位的日志文件 )。
- 若事务在运行过程中,由于种种原因,使事务未运行到正常终止点之间就被撤消,这种情况就称为( 事务故障 )。
- 在数据库系统中,死锁属于( 事务 )故障。
- ( 介质故障 )会破坏磁盘上的物理数据库和日志文件,这是最严重的一种故障。恢复方法是重装数据库后备副本,然后重做已完成的事务。
- 数据库恢复是将数据库从( 错误 )状态恢复到某一已知的正确状态的功能。
- 检查点是( 数据库恢复 )技术中出现的概念。
- 数据库镜像功能用于( 数据库恢复 )。
Chp 9 数据库集群基础
- 集群(cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以( 单一系统 )模式加以管理。
- 对比数据库集群和分布式技术可知,( 数据库集群 )是以缩短单个任务的执行时间来提升效率的,而( 分布式技术 )则是通过提高单位时间内执行的任务数来提升效率。
- ( 分布式计算)是集群系统中的核心技术。
- ( 高性能计算 )集群是并行计算的基础。
- 负载通常包括应用程序处理负载和( 系统 )负载。
- 负载均衡集群使负载可以在计算机集群中尽可能( 均匀 )处理。
- HA 高可用性集群,是指以减少( 中断时间 )为目标的服务器集群技术。
- ( MySQL Cluster )是MySQL适合于分布式计算环境的高实用、高冗余版本。
- 活动第二服务器的“0共享”体系结构中,一般在磁盘子系统中采用( RAID )技术或者采用冗余镜象磁盘来保证数据可用。
- 负载均衡集群一般用于( web )服务器和代理服 务器等搭建。
- Mysql主从复制是将主数据库的DDL和DML操作通过( 二进制日志 )传到从服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。
- 请补充下面MySQL主从复制原理图的数字填空内容,使其表达正确合理。
这里, (1):( 主数据库 )
(2):( 二进制日志 )
(3):( I/O线程 )
(4):( 日志 )
(5):( 从数据库 )
(6):( SQL线程 )
- MySQL数据库中,proxy实现数据库的“读写分离”,主服务器处理事务性更新操作,从服务器处理( 查询 )操作。
- 在CPU、网络、磁盘和内存等诸多因素里,影响集群性能的主要瓶颈是( 网络 )。
- MySQL cluster采用的是一种( 分布式 )数据库架构设计。
Chp 10 非关系型数据库
- NoSQL数据库 泛指( 非关系型数据库 )。
- CAP原理三要素中的分区容忍性是指( 数据存储结构 )。
- MySQL和MongoDB之间最基本的区别是( 数据存储方式的不同 )。
- NoSQL两个核心理论基础是( BigTable )和Dynamo。
- MongoDB底层使用松散的( 文档 )结构作为数据存储格式。
- MongoDB的文档是由多个( 键值对 )有序组合在一起的数据单元。
- MongoDB的默认数据访问端口是( 27017 )。
- MMAPv1和( WiredTiger )是MongoDB使用的两个存储引擎。
- 试分别给出下面MongoDB查询表达式的等价SQL语句:
(1)db. stud.find({sage :{$gt:18, $lt:21}})
( select * from stud where sage>18 and sage<21; )
(2)db. stud.aggregate([
{$match:{ssex: "女"}},
{$group:{_id:"$sdept",count:{$sum:1},asage:{$avg:"$sage"}}},
{$project : {_id: 0,院系: "$_id",人数: "$count",平均年龄: "$asage"}}
]);
( select sdept as ‘院系’ , count(*) as ‘人数’, avg(sage) as ‘平均年龄’ from stud where ssex=’女’ group by sdept; )
- 一个在线考试系统,在设计存放试题的数据库时,如果使用一个名为questions的collections存放基础题、中档题和高难题,通过设置每一个实例的属性type:easy 或者 medium 或者 hard 来标识难易度信息,集合文档结构如下:
"no" : "1",
"title" : "下列选项中不属于javascript基本数据类型的选项是?",
"choose" : "A.boolen B.string C.function ",
"true" : "C",
"type" : "easy"
试设计以下问题的查询语句。
(1)查询10道type:easy的题目;
( db.questions.find({type: "easy"}).limit(10); )
(2)查询5道true : C 且type:easy的题目;
( db.questions.find({true: "C", type: "easy"}).limit(5); )
(3)查询5道true : A 或type:hard的题目;
( db.questions.find({$or: [{true: "A"}, {type: "hard"}]}).limit(5); )
(4)追加下面这道题;
99
集群的主要三种类型是
A.HAC、LBC和HPC B. HAC、LBC和SMP C. HAC、SMP和HPC D. SMP、LBC和HPC
答案:A
难度:medium
( db.questions.insert({
"no": "99",
"title": "集群的主要三种类型是",
"choose": "A.HAC、LBC和HPC B. HAC、LBC和SMP C. HAC、SMP和HPC D. SMP、LBC和HPC",
"true": "A",
"type": "medium"
}); )
(5)将标号no超过20、难度type:easy的题目,难度更改为medium;
( db.questions.update ({$and: [{no: {$gt: "20"}}, {type: "easy"}]}, {$set: {type: "medium"}}); )
(6)删除no:8的题目。
( db.questions.remove({no: "8"}); )
问答题部分:(待更新)
chp8:
1:分析数据库的安全性和完整性的联系和区别
联系:控制数据库中的数据
区别:安全性防范非法操作和未授权用户,完整性防范不符合语义的数据;安全性指防止不合法的使用造成的数据泄露、更改和破坏,完整性指数据的正确性和相容性
2:什么是数据库中的【自主存取控制方法】和【强制存取控制方法】
自主存取控制方法是定义各个用户对不同数据对象的存取对象,当用户对数据库访问时首先检查用户的存取权限,防止不合法用户对数据库的存取
强制存取控制方法是每一个数据对象被强制标注以一定的密集,每一个用户也被强制授予某一个级别的许可,系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象
3:分析实现数据库安全性控制的常用方法和技术
用户识别和鉴别;存取控制;视图机制;审计(用户对数据库的操作自动记录到审计日志中,数据库管理员审计跟踪信息);数据加密
4:统计数据库中存在的特殊的安全性问题
统计数据库允许用户查询聚集类型的信息,如合计、平均值、最大值、最小值等,不允许查询单个记录信息。但是,用户可以从合法的查询中推导出不合法的信息,即:可能存在隐蔽的信息通道,这是统计数据库中存在的特殊的安全性问题
5:分析DBMS完整性控制机制中完整性规则的主要构成
定义功能:提供定义完整性约束条件的机制
检查功能:检查用户发出的操作请求是否违背了完整性约束条件
违约反应:采取一定动作保证数据的完整性
6:关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?
实体完整性/用户定义完整性:拒绝执行
参照完整性:并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性
7: 说明解决SQL注入的有效途径
使用参数化查询;过滤特殊字符;设置权限;定期更新系统
8:分析触发器的工作原理
触发器是一种数据库对象,它是一个存储过程,只有当满足特定条件时才会自动触发执行。它可以用于监视数据库中的数据更改,并在满足特定条件时自动触发操作。常见的触发器包括在数据插入、更新或删除时触发。触发器通常用于实现数据完整性、业务规则或数据审计等需求。在触发器执行时,可以通过引用“inserted”或“deleted”虚拟表来获取有关已更改的数据的信息。 除了在数据变更时触发外,触发器还可以在特定操作之前或之后触发。例如,可以在执行INSERT,UPDATE 或 DELETE 操作之前使用触发器验证用户权限、执行复杂计算或设置相关字段的默认值
9:什么是数据库的审计功能,为什么要提供审计功能
审计:记录数据库系统的操作和行为,并提供审计日志供后续的审查和分析
原因:帮助管理员监控和控制数据库的访问权和操作权限,以及对访问信息进行跟踪和审查;及时发现和处理符合发的数据库操作,防止破坏数据完整性或安全性的风险等
10: 找出下列创建表的语句中涉及的所有约束定义并注释加以说明
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno)
ON DELETE CASCADE //级联删除,Student.Sno删除后SC.Sno也跟着删除
ON UPDATE CASCADE, //级联更新,Student.Sno更新后SC.Sno也跟着更新
FOREIGN KEY(Cno) REFERENCES Course(Cno)
ON DELETE NO ACTION //拒绝删除操作,因为其破坏了实体完整性
ON UPDATE CASCADE //级联更新,Course.Cno更新后SC.Cno也跟着更新
)
11:设有三个事务 T1、T2 和 T3,所包含的动作为:
T1:A=A+2
T2:A=A*2
T3:A=A*A
设 A 的初值为 0:
(1)若这三个事务允许并发执行,则有多少种可能的结果,请一一列举出来
(2)使用封锁协议,给出一个不产生死锁的可串行化调度
(1)6种可能。若舍去重复的结果,则有4种可能的正确结果:16、8、4、2
调度可能 | 结果 |
T1->T2->T3 | 16 |
T1->T3->T2 | 8 |
T2->T1->T3 | 4 |
T2->T3->T1 | 2 |
T3->T1->T2 | 4 |
T3->T2->T1 | 2 |
(2)
T1 | T2 | T3 |
Xlock(A) | ||
Xlock(A) | ||
Xlock(A) | ||
Read(A=0) | 等待 | 等待 |
A=A+2 | 等待 | 等待 |
Write(A=2) | 等待 | 等待 |
COMMIT | 等待 | 等待 |
Unlock(A) | 等待 | 等待 |
Read(A=2) | 等待 | |
A=A*2 | 等待 | |
Write(A=4) | 等待 | |
COMMIT | 等待 | |
Unlock(A) | 等待 | |
Read(A=4) | ||
A=A*A | ||
Write(A=16) | ||
COMMIT | ||
Unlock(A) |
12:考虑两个并发事务,A 和 B 初值均为 2,按两段锁协议执行事务 A 和事 务 B,给出一个可串行的调度,并给出执行结果
执行结果为:A=3,B=4.
事务A | 事务B |
SLOCK B | |
XLOCK A | |
SLOCK A | |
READ(B=2) | |
A=B+1 | |
WRITE(A=3) | |
COMMIT | |
UNLOCK A | |
UNLOCK B | |
XLOCK B | |
READ(A=3) | |
B=A+1 | |
WRITE(B=4) | |
COMMIT | |
UNLOCK A | |
UNLOCK B |
13:T1,T2是两个事务,图(a)(b)给出这两个事务的两种调度S1、S2,试举例分析调度S1和S2是否正确并说明理由
调度S1不正确。因为在S3时T2进行了读B操作,在S5时进行了B=B-20的操作,但在S8时T1进行了读B操作,但是T2直到S9时才写入B,这样会导致数据丢失,发生修改错误。
调度S2正确。因为在T1读A和写A之间的阶段,T2没有对A进行读操作;在T2读B和写B之间的阶段,T1没有对B进行读操作;在T2读C和写C之间的阶段,T1没有对C进行读操作。整个调度中没有发生数据丢失的情况。
14:设T1,T2是如下两个事务:
T1:A=A+1;B=B*3;
T2:A=A*A;B=B+4;
A的初始值为8,B的初始值为2
(1)若这两个事务允许并发执行,则有多少种可能的正确结果,请列举出来;
(2)若这两个事务都遵守两段锁协议,请给出一个不产生死锁的调度。
(1)有2种可能的正确结果,如下表所示:
调度可能 | 结果 |
读A、B 写入A、B | A=81 |
读A、B 写入A、B | A=65 B=18 |
chp9:
chp10: