北邮数据库实验五 数据库完整性与安全性实验 联系客服

发布时间 : 星期二 文章北邮数据库实验五 数据库完整性与安全性实验更新完毕开始阅读

begin select sno,cno from sc where sno=num; end

其中定义了一个读入的参数为num,用来读入所要查询的学生的学号。

创建成功。

调用该存储过程,查看学号为‘31428’的学生的选课信息。

(6) 定义触发器,当向学生表插入新的一条记录时,将所有学生出生日期加1;并对其

进行测试。

触发器的功能是监视某种情况,并触发某种操作。创建触发器的语句为:

create trigger update_bdate after insert on student for each row begin update 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 * 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表和new_student表如下:student表中的数据没有发生改变,只是插入了一条新的学生信息,而new_student表中所有学生信息的出生日期都为1月2号,比student表中的日期加1,但是没有新插入的学生信息。

安全性实验内容

(1) 定义一新的登陆帐号、数据库用户,并授予其访问学生数据库的读权限;

创建新的登陆账号、数据库用户有两种方式,分别为grant 授予权限时创建和create user。下面分别用两种方式创建用户。

grant usage on *.* to 'lqy1'@'localhost' identified by '123456' 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和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在\不重启MySQL服务\的情况下直接生效,那么就需要执行这个命令。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。而不必冒太大风险。

更新如下:

查看user table ,发现lqy1和lqy2已更新。

再次执行授权语句,发现仍然无法找到该用户。然后查找了关于“mysql新建用户本地无法登录”的资料,发现问题在@’localhost’和@’%’上。当你试图连接MySQL服务器时,服务器基于你的身份以及你是否能通过供应正确的密码验证身份来接受或拒绝连接。你的身份取决于两个信息:一是从哪个主机连接,二是mysql用户名。Host值'%'匹配任何主机名,因此将定义新的用户的sql语句改为:

grant usage on *.* to 'lqy1'@’%' identified by '123456' with grant option;

再次执行授权语句,授予lqy3用户访问学生数据库的读权限。