数据库自主存取控制与完整性

  • Post author:
  • Post category:其他




实验名称


自主存取控制与完整性



实验时间



一、




实验目的和要求

(1)掌握用户账户的创建

(2)掌握登录名和用户间的映射关系

(3)掌握存取控制语句的使用方法

(4)掌握级联授权语句的使用方法

(5)掌握trigger使用方法



二、




实验内容

(一)自主存取控制


1.


创建用户


CREATE USER ‘u1’@’%’ IDENTIFIED BY ‘123456’;


CREATE USER ‘u2’@’%’ IDENTIFIED BY ‘123456’;


2.


执行如下操作:


注:部分语句需要自行添加“use 数据库名”语句。

(1)打开“查询设计器”窗口(即新建查询)


请问当前登录为哪个账户?

(2)将score表的查询权限授予用户u1

use teaching

grant select  on score to u1;

(3)u1用户登录服务器

图1 选择“连接MySQL”

图2 u1连接服务器

(4)分别执行如下语句:

A.select sno from score;

B.update score set sno = ‘

0935222210




where sno = ‘

0935222201




C.grant select  on score to u2;


以上三条语句执行结果分别是什么?请说明原因?

(5)参考第(3)步操作方法,登录系统管理员账户(root账户)。

(6)在查询设计器中输入如下授权语句:

use Teaching

grant select  on score to u1 with grant option;

(7)再次登录“u1”账户,在查询设计器中执行如下授权语句:

A.grant select  on score to u2;

B.grant update on score to u2;


问:A、B语句执行结果有何不同,为什么?

(8)登录账户“u2”,并执行如下语句:

A.select * from score;

B.update score set cno=’01’ where cno = ’02’;

分析A、B执行结果,说明原因。

(9)收回u1账户对score表的查询权限,并验证是否成功收回。

(二)完整性

根据以下要求定义触发器,并验证之。

(1)定义触发器

创建触发器tr_c_sc1,当修改course表中某门课程的cno时,使score表中对应cno也随之级联修改。

创建触发器tr_c_sc2,当删除course表中某门课程信息时,使score表中学生对应的选课信息也随之删除。

(2)验证结轮:

A、将course表中cno为‘c05109‘修改为‘06109’

(提示:

执行前先删除score表在cno上的外键

触发的时机是after还是before?

B、将cno为‘c06109’的课程信息从course表删除

触发器的时机是before还是after?为什么?

三.


实验操作步骤:


1.


创建用户


CREATE USER ‘u1’@’%’ IDENTIFIED BY ‘123456’;


CREATE USER ‘u2’@’%’ IDENTIFIED BY ‘123456’;

(2)将score表的查询权限授予用户u1

use teaching grant select  on score to u1;

A.select sno from score;

B.update score set sno = ‘

0935222210




where sno = ‘

0935222201




C.grant select  on score to u2;

6)在查询设计器中输入如下授权语句:

use Teaching grant select  on score to u1 with grant option;

A.grant select  on score to u2; B.grant update on score to u2;

(8)登录账户“u2”,并执行如下语句:

A.select * from score; B.update score set cno=’01’ where cno = ’02’;

(9)收回u1账户对score表的查询权限,并验证是否成功收回。

(1)定义触发器

创建触发器tr_c_sc1,当修改course表中某门课程的cno时,使score表中对应cno也随之级联修改。

CREATE TRIGGER tr_c_scl

BEFORE UPDATE ON course

FOR EACH ROW

UPDATE score SET cno = new.cno

WHERE cno = old.cno;

创建触发器tr_c_sc2,当删除course表中某门课程信息时,使score表中学生对应的选课信息也随之删除。

CREATE TRIGGER tr_c_sc2

BEFORE DELETE ON course

FOR EACH ROW

DELETE FROM score

WHERE cno = old.cno;

(2)验证结轮:

A、将course表中cno为‘c05109‘修改为‘06109’

SET FOREIGN_KEY_CHECKS = 0;

UPDATE course SET cno = ‘c06109’

WHERE cno = ‘c05109’;

将cno为‘c06109’的课程信息从course表删除

SET FOREIGN_KEY_CHECKS = 0;

DELETE FROM course

WHERE cno = ‘c06109’;



四、




(包括问题和解决方法




、心得体会、意见与




建议等):


通过本次的实验我学到了

掌握用户账户的创建,掌握登录名和用户间的映射关系,掌握存取控制语句的使用方法,掌握级联授权语句的使用方法,同时也是意识到学习需要不断进取,对于不熟悉的内容还要多勤加练习。




版权声明:本文为LianQH原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。