实验题目 | 实验六 SJK安全性语言 | ||||
实验时间 | 2023.5.3 | 实验地点 | 软件工程基础实验室 | 实验课时 | 2 |
实验目的 | 掌握自主存取控制权限的定义和维护方法。 | ||||
实验要求 | 定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设计权限分配 | ||||
实验步骤 及内 | (1)创建用户 MYSQL的用户创建语句格式如下: CREATE USER user_account IDENTIFIED BY password; 其中user_account的格式是username@hostname。 为学生管理,教务管理的人员A,B创建用户标识和用户口令。 CREATE USER A IDENTIFIED BY "123456"; CREATE USER B IDENTIFIED BY "123456"; CREATE USER C IDENTIFIED BY "123456"; 为学生X,教师Y创建用户标识和用户口令。 CREATE USER X IDENTIFIED BY "123456"; CREATE USER Y IDENTIFIED BY "123456"; /*计网课程的教师*/ (2)创建角色并分配权限 创建学生角色,可以对个人信息,选课情况及课程情况进行查询。 CREATE ROLE StudentRole; /*只能查询自己的信息,需要借助视图实现*/ CREATE VIEW v_student AS SELECT * FROM aas.student WHERE concat(sname,'@localhost') = USER(); GRANT SELECT ON aas.v_student TO StudentRole; /*只能查询自己的选课信息,同样使用视图实现*/ CREATE VIEW v_sc AS SELECT * FROM aas.student NATURAL JOIN aas.sc WHERE concat(sname,'@localhost') = USER(); GRANT SELECT ON aas.v_sc TO StudentRole; /*查询课程情况*/ GRANT SELECT ON aas.course TO StudentRole; 创建教师角色,可以查询学生信息,查询自己任课课程的选课信息和全部课程信息,可以更新选课信息中的成绩字段。 CREATE ROLE TutorRole; /*可以查询全部学生信息*/ GRANT SELECT ON aas.student TO TutorRole; /*可以查询自己任课的课程选课情况,并修改成绩,借助视图实现*/ CREATE VIEW v_tsc AS SELECT * FROM aas.sc NATURAL JOIN aas.course WHERE concat(Tname,'@localhost') = USER(); GRANT SELECT,UPDATE(grade) ON aas.v_tsc TO TutorRole; /*可以查询所有课程信息*/ GRANT SELECT ON aas.course TO TutorRole; 为学生管理,教务管理的人员创建角色,相应的对学生信息,选课信息和课程信息有全部的权限,对其他表有查询权限。其中,教务管理人员可以为其他人分配权限。 /*学生管理角色*/ CREATE ROLE StudentSuperviserRole; GRANT ALL PRIVILEGES ON aas.student TO StudentSuperviserRole; GRANT SELECT ON aas.sc TO StudentSuperviserRole; GRANT SELECT ON aas.course TO StudentSuperviserRole; /*教务管理角色*/ CREATE ROLE AffairMangerRole; GRANT ALL PRIVILEGES ON aas.sc TO AffairMangerRole WITH GRANT OPTION; GRANT ALL PRIVILEGES ON aas.course TO AffairMangerRole WITH GRANT OPTION; GRANT SELECT ON aas.student TO AffairMangerRole; (3)给用户分配权限 为用户X,Y分配学生,教师角色的权限;为用户A,B,C分配学生管理角色,教务管理角色的权限。 GRANT StudentRole TO X; GRANT TutorRole TO Y; GRANT StudentSuperviserRole TO A; GRANT AffairMangerRole TO B; GRANT AffairMangerRole TO C; (4)回收角色或用户的权限 回收教师查询学生信息的权限。回收教务管理人员C的权限。 REVOKE SELECT ON student FROM TutorRole; REVOKE AffairMangerRole FROM C; (5)验证权限分配的正确性 首先以用户名X登录数据库,X具有学生角色的权限,即可以查询自己的信息和选课信息以及所有课程信息。 /*登录后首先要激活角色,选择模式aas*/ SET ROLE ALL; use aas; /*查询个人信息*/ select * from v_student; /*查询选课信息*/ SELECT * FROM v_sc NATURAL JOIN course; | ||||
实验结果及分析 | 经检验,实验基本达到预期效果。通过本次实验,进一步熟悉了自主存取控制权限的方法,使用SQL语句进行了角色的创建,权限的分配,以及将角色权限分配给用户。在实验中,学习到MYSQL的角色的使用需要在用户登录后先进行激活,才能正常使用。实验的最后使用不同用户进行登录,对所分配权限的正确性进行了验证。 |