实验六 SJK安全性语言

发布于:2024-05-02 ⋅ 阅读:(33) ⋅ 点赞:(0)

实验题目

实验六 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的角色的使用需要在用户登录后先进行激活,才能正常使用。实验的最后使用不同用户进行登录,对所分配权限的正确性进行了验证。