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

实验名称

自主存取控制与完整性

实验时间

一、  实验目的和要求

(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';

四、 (包括问题和解决方法、心得体会、意见与建议等):

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

 


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值