【MySQL】实验07 数据库的安全性保护

avatar

azurekiln

  1. (简答题, 3分) 本实验的实验目的是:

    掌握视图的创建与使用,理解MySQL用户管理、权限授予与回收、角色管理。

  2. (简答题, 4分)
    创建一个视图,名称设置为view_StuInfoDno03_学号最后两位,用来查询学院编号为03的学生的所有信息,并且要求基于该视图进行更新操作时,仍需保证该视图只有该学院的学生。
    提交内容:
    (1)创建视图的语句;

    USE Jxdb59;
    CREATE VIEW view_StuInfoDno03_59 AS
    SELECT * FROM Students59
    WHERE Dno = '03'
    WITH CHECK OPTION;


    (2)查询该视图中女学生的学号,姓名,并将结果截图,图片的右下角写上学号的最后两位;

    USE Jxdb59;
    SELECT Sno, Sname FROM view_StuInfoDno03_59 WHERE Sgender = '女';

  3. (简答题, 9分)

    通过视图view_StuInfoDno03_学号最后两位,分别插入以下两个学生的信息。
    提交内容:
    (1)写出插入学生张三信息的语句;

    USE Jxdb59;
    # 插入张三(学院03)
    INSERT INTO view_StuInfoDno03_59 VALUES ('202403038199', '张三', '男', '2004-05-15', '广东潮州', '03', '0303', '2024030381');

    (2)写出在学生表中查询张三信息的语句,并将执行结果截图,图片的右下角写上学号的最后两位;

    SELECT * FROM Students59 WHERE Sname = '张三';

    (3)写出插入学生李四信息的语句;

    INSERT INTO view_StuInfoDno03_59 VALUES ('202416026101', '李四', '女', '2006-05-10', '广东揭阳', '16', '1602', '2024160261');

    (4)将执行结果截图,图片的右下角写上学号的最后两位;

    (5)分析两个插入语句的执行结果。

    张三插入成功,李四失败。因为 WITH CHECK OPTION 限制只能插入学院编号为03的学生。

  4. (简答题, 4分)
    创建一个视图,名称设置为view_RepInfo_学号最后两位,用来查询学生的选课信息,结果显示学号,姓名,课程号,课程名和成绩。
    提交内容:
    (1)创建视图的语句;

    USE Jxdb59;
    CREATE VIEW view_RepInfo_59 AS
    SELECT r.Sno, s.Sname, r.Cno, c.Cname, r.Grade
    FROM Reports59 r
    JOIN Students59 s ON r.Sno = s.Sno
    JOIN Courses59 c ON r.Cno = c.Cno
    WITH CHECK OPTION;


    (2)查询该视图中学号为202003005104的学生的选课情况,并将结果截图,图片的右下角写上学号的最后两位;

    USE Jxdb59;
    SELECT * FROM view_RepInfo_59 WHERE Sno = '202003005104';

  5. (简答题, 5分)
    通过视图view_RepInfo_学号最后两位,将学生202203005105选修的课程112p0024的成绩修改为76分。
    提交内容:
    (1)首先查询学生202203005105选修的112p0024的原成绩,将执行结果截图,图片的右下角写上学号的最后两位;

    # 查原成绩
    SELECT * FROM view_RepInfo_59 WHERE Sno = '202203005105' AND Cno = '112p0024';


    (2)写出修改成绩的语句,将执行结果截图,图片的右下角写上学号的最后两位;

    # 修改成绩
    UPDATE view_RepInfo_59 SET Grade = 76 WHERE Sno = '202203005105' AND Cno = '112p0024';


    (3)再查询学生202203005105选修的112p0024的新成绩,将执行结果截图,图片的右下角写上学号的最后两位

    (4)分析执行结果

    视图基于多表连接,但Grade字段来自单表Reports,可以更新。

  6. (简答题, 4分)
    创建一个视图,名称设置为view_StuCreditInfo_学号最后两位,用来查询学生已获学分的情况,结果显示学号,姓名和已获学分。
    提交内容:
    (1)创建视图的语句;(注意,已获学分需要给出字段别名)

    CREATE VIEW view_StuCreditInfo_59 AS
    SELECT s.Sno, s.Sname, SUM(IF(r.Grade >= 60, c.Ccredit, 0)) AS GotCredit
    FROM Students59 s
    LEFT JOIN Reports59 r ON s.Sno = r.Sno
    LEFT JOIN Courses59 c ON r.Cno = c.Cno
    GROUP BY s.Sno, s.Sname;

    (2)查询该视图中学号为202116026101的学生已获学分情况,并将结果截图,图片的右下角写上学号的最后两位;

    SELECT * FROM view_StuCreditInfo_59 WHERE Sno = '202116026101';

  7. (简答题, 5分)
    使用 root 用户登录MySQL服务器,然后创建一个新的本机的管理员用户,用户名设置为Man+学号最后两位,初始密码设置为本人学号,授予该用户对数据库jxdb拥有所有的权限,并且使该用户可以将权限授予其他用户。
    提交内容:
    (1)创建用户的语句;

    CREATE USER 'Man59'@'localhost' IDENTIFIED BY '202411039159';

    (2)授权语句;

    GRANT ALL PRIVILEGES ON Jxdb59.* TO 'Man59'@'localhost' WITH GRANT OPTION;

    (3)查询mysql.db表中的数据内容,并将对应的结果截图,图片右下角加上学号最后两位;

    SELECT * FROM mysql.db WHERE User = 'Man59';

  8. (简答题, 6分)
    使用root用户创建一个教师用户,用户名设置为Tea+学号最后两位,该用户密码设置为'000000',在命令行窗口,以Tea+学号最后两位用户登录MySQL,然后将该用户的密码设置为完整学号。
    提交内容:
    (1)创建用户的语句;

    CREATE USER 'Tea59'@'localhost' IDENTIFIED BY '000000';


    (2)在命令行窗口,以该教师用户登录MySQL,将命令及成功登录的结果截屏,图片右下角写上学号最后两位;

    mysql -u Tea59 -p


    (3)在登录界面,输入修改用户密码的语句,并将语句及执行结果截屏,图片右下角写上学号最后两位。

    SET PASSWORD='202411039159';

  9. (简答题, 5分)
    在教师用户Tea+学号最后两位中,查询jxdb数据库中Students学生表所有信息。
    提交内容:
    (1)查询语句;

    USE Jxdb59;
    SELECT * FROM Students59;

    (2)将执行结果截图,图片右下角写上学号最后两位;

    (3)对执行结果进行分析。

    执行失败,因为Tea59没有被授予访问数据库Jxdb59的权限。

  10. (简答题, 5分)
    使用管理员用户Man+学号最后两位登录MySQL,授予教师用户Tea+学号最后两位对数据库jxdb的学生表(Students)的SELECT、UPDATE权限,对课程表(Courses)的SELECT权限,以及对选课表(Reports)的SELECT权限以及对Grade字段的UPDATE的权限。
    提交内容:
    (1)授予权限的语句;

    GRANT SELECT, UPDATE ON Jxdb59.Students59 TO 'Tea59'@'localhost';
    GRANT SELECT ON Jxdb59.Courses59 TO 'Tea59'@'localhost';
    GRANT SELECT, UPDATE(Grade) ON Jxdb59.Reports59 TO 'Tea59'@'localhost';

    (2)在root用户中,查询table_priv表和columns_priv表中的相关信息,并将结果截图,图片右下角写上学号的最后两位

    SELECT * FROM mysql.tables_priv WHERE User = 'Tea59';
    SELECT * FROM mysql.columns_priv WHERE User = 'Tea59';

  11. (简答题, 10分)
    重新登录教师用户Tea+学号最后两位,验证教师用户的存取权限。
    提交内容:
    (1)查询jxdb数据库中Courses课程表中课程名包含'数据'的课程信息,将执行结果截图,图片右下角写上学号最后两位;

    SELECT * FROM Jxdb59.Courses59 WHERE Cname LIKE '%数据%';


    (2)通过视图view_StuInfoDno03_学号,将学号为'202403038199'的学生的姓名改为'王五',将执行结果截图,图片右下角写上学号最后两位;

    UPDATE Jxdb59.view_StuInfoDno03_59 SET Sname = '王五' WHERE Sno = '202403038199';


    (3)将Reports表中学号为'202203005105'的学生选修的课程号'112p0024'的选修学年改为2018,将执行结果截图,图片右下角写上学号最后两位;

    UPDATE Jxdb59.Reports59 SET Racademicyear = 2018 WHERE Sno = '202203005105' AND Cno = '112p0024';


    (4)分别对以上执行结果进行分析。

    (1)成功;(2)失败,没有视图view_StuInfoDno03_59的UPDATE权限;(3)失败,只有Grade列的UPDATE权限。

  12. (简答题, 6分)
    在root用户中,创建学生角色role_Stu_学号最后两位,并对学生角色授予以下权限:
    (1)对Students表的学号、姓名、出生日期、专业编号和学院编号的SELECT权限;
    (2)对Courses表和Reports表的SELECT权限;
    提交内容:
    (1)创建角色的语句;

    CREATE ROLE 'role_Stu_59';

    (2)对角色授权的语句;

    GRANT SELECT(Sno, Sname, Sbirth, Mno, Dno) ON Jxdb59.Students59 TO 'role_Stu_59';
    GRANT SELECT ON Jxdb59.Courses59 TO 'role_Stu_59';
    GRANT SELECT ON Jxdb59.Reports59 TO 'role_Stu_59';

    (3)查询table_priv表和columns_priv表,对相应权限进行截图,图片右下角写上学号的最后两位

    SELECT * FROM mysql.tables_priv WHERE User = 'role_Stu_59';
    SELECT * FROM mysql.columns_priv WHERE User = 'role_Stu_59';


  13. (简答题, 4分)
    在root用户中创建学生用户Stu+学号最后两位,密码设置为本人姓的全拼+学号最后两位,并将该用户赋予学生角色role_Stu_学号最后两位。
    提交内容:
    (1)创建学生用户的语句;

    CREATE USER 'Stu59'@'localhost' IDENTIFIED BY 'li59';

    (2)将该用户赋予学生角色的语句。

    GRANT 'role_Stu_59' TO 'Stu59'@'localhost';
    SET DEFAULT ROLE 'role_Stu_59' TO 'Stu59'@'localhost';

  14. (简答题, 8分)
    用学生用户Stu+学号最后两位登录MySQL服务器,并对学生的权限进行验证。
    提交内容:
    (1)登录语句,并将登录结果截图,图片的右下角写上学号的最后两位;

    mysql -u Stu59 -p

    (2)在该学生用户中,查询Students表中所有姓张的同学的信息,将结果截图,图片的右下角写上学号的最后两位;

    SELECT * FROM Jxdb59.Students59 WHERE Sname LIKE '张%';


    (3)在该学生用户中,查询Students表中所有姓李的同学的学号,姓名,专业号和学院号,将结果截图,图片的右下角写上学号的最后两位;

    SELECT Sno, Sname, Mno, Dno FROM Jxdb59.Students59 WHERE Sname LIKE '李%';


    (4)对以上两个结果进行分析。

    第一个失败(SELECT *包含无权限列),第二个成功(只查有权限的列)。

  15. (简答题, 12分)
    在管理员用户Man+学号最后两位中,将视图view_StuInfoDno03_学号最后两位的SELECT权限授权角色role_Stu_学号最后两位,然后在学生用户Stu99中,对其权限进行验证。
    提交内容:
    (1)授权语句;

    GRANT SELECT ON Jxdb59.view_StuInfoDno03_59 TO 'role_Stu_59';


    (2)在学生用户Stu_学号最后两位中,利用视图view_StuInfoDno03_学号最后两位查询2004年6月1日以后出生的学生信息,将执行结果截图,图片的右下角写上学号的最后两位;

    # 通过视图查询
    SELECT * FROM Jxdb59.view_StuInfoDno03_59 WHERE Sbirth > '2004-06-01';

    (3)在学生用户Stu_学号最后两位中,在Students表中查询2004年6月1日以后出生的学生信息,将执行结果截图,图片的右下角写上学号的最后两位;

    # 直接查Students表全部
    SELECT * FROM Jxdb59.Students59 WHERE Sbirth > '2004-06-01';

    (4)在学生用户Stu_学号最后两位中,在Students表中查询2004年6月1日以后出生的学生的学号和姓名,将执行结果截图,图片的右下角写上学号的最后两位;

    # 查Students表部分列
    SELECT Sno, Sname FROM Jxdb59.Students59 WHERE Sbirth > '2004-06-01';

    (5)对比分析以上三个执行结果。

    视图查询成功;直接查全部列失败;查有权限的列成功。

  1. (简答题, 3分)
    在root用户中,收回教师用户Tea+学号最后两位对学生表Students的UPDATE权限。
    提交内容:
    (1)收回权限的语句;
    REVOKE UPDATE ON Jxdb59.Students59 FROM 'Tea59'@'localhost';

    (2)查询table_priv表,将相关信息截图,图片的右下角写上学号的最后两位

    SELECT * FROM mysql.tables_priv WHERE User = 'Tea59';

  2. (简答题, 6分)
    在root用户中,收回学生用户Stu+学号最后两位的所有权限。
    提交内容:
    (1)收回权限的语句;
    REVOKE 'role_Stu_59' FROM 'Stu59'@'localhost';


    (2)在学生用户Stu+学号最后两位中,查询学生表Students中专业号为0303的学生的学号和姓名,将相关信息截图,图片的右下角写上学号的最后两位;

    SELECT Sno, Sname FROM Jxdb59.Students59 WHERE Mno = '0303';

    (3)分析执行结果。

    执行失败,角色被收回后没有任何权限。


扫描二维码,在手机上阅读
收藏
powered by emlog pro
服务器供应商 新区云数据

友情链接
白衣Ink


sitemap