实验五 数据库完整性与安全性实验_第1页
实验五 数据库完整性与安全性实验_第2页
实验五 数据库完整性与安全性实验_第3页
实验五 数据库完整性与安全性实验_第4页
实验五 数据库完整性与安全性实验_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验五 数据库完整性与安全性实验1、实验目的1. 通过对完整性规则的定义实现,熟悉了解kingbase中完整性保证的规则和实现方法,加深对数据完整性的理解。2. 通过对安全性相关内容的定义,熟悉了解kingbase中安全性的内容和实现方法,加深对数据库安全性的理解2、实验环境操作系统:Microsoft Windows 7旗舰版 (32位)。 数据库版本:MySQL 6.23、实验内容3.1完整性实验:(1) 分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;在create table 时已经定义了各个基表的主键。因此

2、,首先对每个基表删除主键,再添加主键。实现实体完整性约束。如下图。删除主键:添加主键:sc表中的cno和sno分别是course表和student表的外关键字。下图为给sc表添加student和course的外键,实现参照完整性约束。alter table sc add constraint fk_student foreign key(sno) references student(sno);alter table sc add constraint fk_course foreign key(cno) references course(cno); 主键和外键均添加成功,输入show cr

3、eate table 命令来查看各基表信息。(2) 分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;l 向课程表中插入课程号为C01的课程。l 向学生表中插入学号为30201的学生。由上面两个实验来看,分别对student和course表插入具有相同学号和相同课程号的学生信息和课程信息,都显示sql语句错误信息为:Duplicate entry * for key PRIMARY。验证了实体完整性约束。(3) 向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;插入成绩信息是学号为31428(student中存在),课程号为C

4、07(course中不存在)的学生成绩信息。受参照完整性约束,插入失败。(4) 删除学生表中的所有数据,验证参照完整性约束;因为sc表中的sno是student表的外键,删除学生表中的所有数据违背了参照完整性约束,所以无法删除。(5) 定义存储过程,完成查询某个学生的选课情况,并执行。本次实验设计的存储过程完成的是查询某个学生的选课情况。参数指定为sno学号。存储过程是一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。因为在存储过程中会用到结束符;,所以首先用delimiter修改结束符为/,创建存储过程的

5、sql语句为:create procedure search_sc(num char(6)begin select sno,cno from sc where sno=num;end其中定义了一个读入的参数为num,用来读入所要查询的学生的学号。创建成功。调用该存储过程,查看学号为31428的学生的选课信息。(6) 定义触发器,当向学生表插入新的一条记录时,将所有学生出生日期加1;并对其进行测试。触发器的功能是监视某种情况,并触发某种操作。创建触发器的语句为: create trigger update_bdateafter insert on studentfor each row begi

6、nupdate student set bdate=bdate+1;end表示当对student表进行插入操作后,对student表进行出生年月日加1的sql语句的执行。向student里插入一条新纪录,触发触发器update_bdate的操作,但是出现了下述错误信息:it is already used by statement which invoked this stored function/trigger。经过了解,mysql中需要复制重建一个新的table,然后通过对旧table的操作来触发对新table 的操作。create table new_student select *

7、from student; /建立新表create trigger t_bdate /建立触发器before insert on student for each row update new_student set bdate=date_add(bdate,interval 1 day)insert into student /插入查询语句values('31011','lihua','男','1991-01-01 00:00:00','计算机','3147') 查看更新后的student表和ne

8、w_student表如下:student表中的数据没有发生改变,只是插入了一条新的学生信息,而new_student表中所有学生信息的出生日期都为1月2号,比student表中的日期加1,但是没有新插入的学生信息。3.2安全性实验内容(1) 定义一新的登陆帐号、数据库用户,并授予其访问学生数据库的读权限;创建新的登陆账号、数据库用户有两种方式,分别为grant 授予权限时创建和create user。下面分别用两种方式创建用户。grant usage on *.* to 'lqy1''localhost' identified by '123456

9、9; with grant option;with grant option 是使lqy1用户拥有授予权限的权利,是一句表示权限传递的语句。create user 'lqy2''localhost' identified by '123456'以lqy1为例,授予其访问学生数据库的读权限。发现在user table 中并没有找到lqy1用户,发生这一错误的原因是在变更了mysql.user表之后,没有使用FLUSH PRIVILEGES命令来更新权限表(grant tables)。flush privileges 命令本质上的作用是将当前user

10、和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。更新如下:查看user table ,发现lqy1和lqy2已更新。再次执行授权语句,发现仍然无法找到该用户。然后查找了关于“mysql新建用户本地无法登录”的资料,发现问题在localhost和%上。当你试图连接MySQL服务器时,服务器基于你的

11、身份以及你是否能通过供应正确的密码验证身份来接受或拒绝连接。你的身份取决于两个信息:一是从哪个主机连接,二是mysql用户名。Host值'%'匹配任何主机名,因此将定义新的用户的sql语句改为:grant usage on *.* to 'lqy1'%' identified by '123456' with grant option;再次执行授权语句,授予lqy3用户访问学生数据库的读权限。(2) 分别用root用户和新定义的用户访问学生数据库,并对其中的学生表数据进行修改;root超级用户登录:lqy3用户登录:Root超级用户查询及

12、修改课程信息:Lqy3 用户查询及修改课程信息,因为lqy3用户仅有读权限,所以可以查询数据库,但是不能够对数据库中的信息进行修改。(3) 再次用此用户访问学生数据库,并对其中的学生表数据进行修改。登录root用户,授予lqy3用户写权限:再次用lqy3用户登录,更改课程信息,成功。4、实验总结1、实现参照完整性约束时遇到的问题最初建立外键时sql语句错误,错误信息是“cannot add or update a child row: a foreign key constraint fails”,原因在于:查询优化实验中,对sc表插入了三个元组,sno的值为10111,而该值并没有在stud

13、ent表中存在。参照完整性约束的规定是:若M是关系S中的一属性组,且M是另一关系Z的主关键字,则称M为关系S对应关系Z的外关键字。若M是关系S的外关键字,则S中每一个元组在M上的值必须是空值或是对应关系Z中某个元组的主关键字值。因此,存在三个sno='10111'的元组,而student表中并不存在sno='10111'的学生信息,相当于三个不存在的学生却拥有成绩表。这显然是不合理的。因此只要将这三行元组删除即可。2、定义存储过程中遇到的问题注意要先更改结束符,因为存储过程中的sql语句以通用的分号为结束符,其作为定义存储过程的sql语句的一部分,会引发语句错误。3、定义触发器时遇到的问题使用create trigger 语句创建触发器是可以成功的,但是向student插入记录,触发触发器的操作时,出现了循环的错误信息,后来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论