数据库实验二:安全性语言实验

news2024/11/17 8:35:42

实验二 安全性语言实验

实验 2.1 自主存取控制实验

1.实验目的

掌握自主存取控制权限的定义和维护方法。

2.实验内容和要求

定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设计权限分配。可以采用两种方案。 ​ 方案一:采用SYSTEM超级用户登录数据库,完成所有权限分配工作,然后用相应用户名登录数据库以验证权限分配正确性; ​ 方案二:采用SYSTEM用户登录数据库创建三个部门经理用户,并分配相应的权限,然后分别用三个经理用户名登录数据库,创建相应部门的USER、ROLE,并分配相应权限。

3.实验重点和难点

实验重点:定义角色,分配权限和回收权限。 ​ 实验难点:实验方案二实现权限的再分配和回收。

4.实验过程

使用实验一中建立的教务系统AAS数据库模式。AAS数据库模式由学生表(student),课程表(course),选课表(sc)三个基本表组成。假设该系统具有学生信息查询,成绩录入,课程管理等功能,为以上三个功能使用自主存取控制机制设计一个具体的权限分配方案。

为了便于验证,为课程表添加了一个属性Tname,表示任课教师的名称,并将计网课程的教师名设置为Y。

ALTER TABLE course 
ADD COLUMN(
    Tname CHAR(20)
);
SET SQL_SAFE_UPDATES = 0;
update course
set tname='Y'
WHERE Cname="计算机网络";

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

尝试修改自己的信息,没有该权限。

UPDATE v_student
SET Sname="Y";

 接下来以用户名Y登录数据库,Y具有教师角色的权限,可以查询自己任课课程的选课信息和全部课程信息,可以更新选课信息中的成绩字段,查询学生信息的权限被收回,不存在该权限。

/*登录后首先要激活角色,选择模式aas*/
SET ROLE ALL;
use aas;
/*更新成绩字段*/
SET SQL_SAFE_UPDATES=0;
UPDATE v_tsc
SET grade=85
WHERE sno="202012208";
/*查询任课课程的选课信息*/
SELECT *
FROM v_tsc;
/*查询学生信息*/
SELECT *
FROM student;

更新后的查询结果:

 查询学生信息的权限已被收回,不能查询。

 以用户名A登录数据库,有学生管理员的权限,进行学生信息的查询和更新验证。

/*登录后首先要激活角色,选择模式aas*/
SET ROLE ALL;
use aas;
/*更新学生信息并进行查询*/
SET SQL_SAFE_UPDATES=0;
UPDATE student
SET Sage=22
WHERE sno="202012211";
SELECT Sage
FROM student
WHERE sno="202012211";
/*验证sc表和course表的查询权限*/
select *
from sc;

可以进行更新和查询:

 以用户名B登录,该用户具有教务管理角色的权限,有课程和选课表的所有权限。

/*登录后首先要激活角色,选择模式aas*/
SET ROLE ALL;
use aas;
/*插入一门课程,然后进行查询*/
INSERT INTO course(Cno,Cname)
VALUE("20","TESTCOURSE");
SELECT *
FROM course;

 最后以用户名C登录,该用户的角色权限被收回,因此无法进行任何操作。

 5.实验总结

通过本次实验,进一步熟悉了自主存取控制权限的方法,使用SQL语句进行了角色的创建,权限的分配,以及将角色权限分配给用户。在实验中,学习到MYSQL的角色的使用需要在用户登录后先进行激活,才能正常使用。实验的最后使用不同用户进行登录,对所分配权限的正确性进行了验证。

6.思考题

(1)分析WITH CHECK OPTION,WITH ADMIN OPTION 和 WITH GRANT OPTION 的区别和联系。

WITH CHECK OPTION用于视图的创建,作用是在使用视图时保证了通过视图进行的修改,也能通过该视图看到修改后的结果。WITH ADMIN OPTION语句和WITH GRANT OPTION语句都用于授权。如果在授予用户或角色权限时添加了WITH ADMIN OPTION语句,可以将该权限再授予其他角色;如果在授予用户或角色权限时添加了WITH GRANT OPTION语句,也可以将该权限授予再授予其他用户。

对与授权的WITH GRANT OPTION和WITH ADMIN OPTION的区别,一种解释是WITH ADMIN OPTION用于系统权限授权,WITH GRANT OPTION用于对象授权,而用户的系统权限被收回时,这个用户已经授予其他用户或角色的此系统权限不会因传播无效。

在MYSQL中,只有WITH GRANT OPTION语句,没有WITH ADMIN OPTION语句。

(2)请结合上述实验示例分析使用角色进行权限分配有何优缺点。

如果有许多用户都具有一类相同的权限,使用角色可以方便的批量分配权限。但是如果各用户的权限都存在不同,使用角色就不够灵活,可能需要创建许多不同的角色,更加繁琐。

实验2.2 审计实验

1.实验目的

掌握数据库审计的设置和管理方法,以便监控数据库操作,维护数据库安全。

2.实验内容和要求

打开数据库审计开关。以具有审计权限的用户登录数据库,设置审计权限,然后以普通用户登录数据库,执行相应的数据操纵SQL语句,验证相应审计设置是否生效,最后再以具有审计权限的用户登录数据库,查看是否存在相应的审计信息。

3.实验重点和难点

实验重点:数据库对象级审计,数据库语句级审计。

实验难点:合理地设置各种审计信息。一方面,为了保护系统重要的敏感数据,需要系统地设置各种审计信息,不能留有漏洞,以便随时监督系统使用情况,一旦出现问题,也便于追查;另一方面,审计信息设置过多,会严重影响数据库的使用性能,因此需要合理设置。

4.实验过程

MySQL不支持语句级审计,只能对所有的SQL使用进行日志记录。

(1)日志开关

显示当前日志开关状态。默认是关闭状态。

show variables like '%general_log%';

 开启日志。

SET GLOBAL GENERAL_LOG=ON;

(2)验证日志

以用户A登录数据库,进行一些查询。

select *
from sc;
SELECT *
FROM course;

打开日志文件,可以看到刚才进行的查询操作。

 

5.实验总结

不同数据库对审计的支持都存在不同。审计语句不是SQL标准。在MYSQL社区版中,没有提供具体的审计设置,只能通过日志记录所有的数据库操作,一旦开启,任何操作都会都会记录在日志中,这会导致日志文件过大且影响效率。还有一些其他插件可以支持审计功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GRU回归预测】基于matlab鲸鱼算法优化门控循环单元WOA-GRU神经网络回归预测(多输入单输出)【含Matlab源码 2285期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据,用一维卷积核对数据进行卷积处理,以获取数据的特征。 现设定卷积核的维度为3,移动步长为1,对输入数据进行卷积,以获得特征图图谱,即…

postgresql_internals-14 学习笔记(四)TOAST 超尺寸字段存储技术

TOAST之前一直没太弄懂,这一节单独拆出来学习。 一、 引入原因 pg中的每个行只能存在一个page里,不能跨page存储。因此对于一些非常长的行,就需要使用到 TOAST(The OverSized Attribute Storage Technique,超尺寸字段存…

import sklearn出现报错,如何正确安装sklearn

目录 一:前言 二:解决方法 三:测试是否成功安装 一:前言 博主最早只使用下面安装命令,安装sklearn pip3 install sklearn -i https://pypi.mirrors.ustc.edu.cn/simple/ 但在pycharm编辑器,导入sklearn模…

更合理的 BBR

BBR 倾向于排空队列,甚至用特殊的 ProbeRTT 状态来排空自己产生的队列以测量 RTT,但这并不现实。一言以蔽之,BBR 无法实时跟踪现状,只靠拢理想。 若因背景流量造成 buffer 抖动,BBR 完全无法应对,其运行状…

手撕B树 | 二三查找树,B+树B*树你都会了吗? | 超详细的数据结构保姆级别实现

说在前面 今天给大家带来B树系列数据结构的讲解! 博主为了这篇博客,做了很多准备,试了很多画图软件,就是为了让大家看得明白!希望大家不要吝啬一键三连啊!! 前言 那么这里博主先安利一下一些…

C语言百日刷题第十六天

前言 今天是刷题第16天,放弃不难,但坚持一定很酷~ 五套C语言验报告题 C语言百日刷题第十六天前言试验报告(一)试验报告(二)分析功能编写程序试验报告(三)分析功能编写程序试验报…

自定义图表--随意拖拽拉伸功能的实现

随意拖拽、拉伸元素的功能是现在大热的自定义图表的重要组成功能,本文以最简单的视角搞懂随意拖拽、拉伸元素功能,完成这个功能需要先了解原生 drag && vue-ruler-tool && @smallwei/avue demo在线体验地址:zhao-wenchao110.gitee.io/customdrag 一、了解H…

高并发内存池

"花,就在火海里摇曳开着。" 一、技术介绍 (1)什么是池化技术? 池 是在计算机技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源先申请出来,放到一个池内,由程序自己管理。这样可以提高资源的使…

【单调栈】接雨水

文章目录双指针动态规划单调栈双指针 每一列雨水的高度&#xff0c;取决于该列 min(左侧最高的柱子高度&#xff0c;右侧最高的柱子高度) - 当前柱子高度 class Solution { public:int trap(vector<int>& height) {int n height.size();int ans 0;for(int i 1; …

ZY_BMP280大气压模块的使用和程序

在搞设计时&#xff0c;用到了大气压模块BMP280&#xff0c;这玩意也不难&#xff0c;主要是淘宝店老板特别der一问三不知&#xff0c;真服了&#xff0c;而且资料里面没有给例程&#xff0c;只有51的例程&#xff0c;利用IIC通信&#xff0c;而且给的例程里面&#xff0c;乱七…

数据库实验五:数据库设计实验

实验五 数据库设计实验 1.实验目的 ​ 掌握数据库设计基本方法及数据库设计工具。 2.实验内容和要求 ​ 掌握数据库设计基本步骤&#xff0c;包括数据库概念结构设计、逻辑结构设计&#xff0c;物理结构设计&#xff0c;数据库模式SQL语句生成。能够使用数据库设计工具进行…

ctf笔记:编码

常见编码 博客链接&#xff1a;https://www.blog.23day.site/articles/76 计算机中的数据都是按字节存储。一个字节(Byte)由8个二进制位组成(bit)。&#xff08;组成范围是0~255(28))一个字节一共可以用来表示256种不同的状态&#xff0c;每一个状态对应一个符号&#xff0c;就…

推荐系统学习笔记-隐语义模型

由来 该算法最早在文本挖掘领域被提出&#xff0c;用于找到文本的隐含语义。 核心思想是通过隐含特征(latent factor) 联系用户兴趣和物品。 参数 f&#xff1a;隐向量维度&#xff0c;决定隐向量表达能力强弱 n&#xff1a;用户数 m&#xff1a;物品数 求解方法&#xff1a;…

ADI Blackfin DSP处理器-BF533的开发详解57:DSP控制ADV7180采集图像到LCD显示(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了采集一帧 720625 尺寸的 P 制 CVBS 信号源&#xff0c;以 YUYV422 的数据格式保存&#xff0c;通过 MDMA 将奇偶场数据交…

【轻松掌握C语言】文件操作

目录 一、为什么使用文件&#xff1f; 二、什么是文件&#xff1f; 1、程序文件 2、数据文件 3、文件名 三、文件操作 1、文件指针 2、文件打开与关闭 . 3、文件的顺序读写 4、文件的随机读写 5、文本文件和二进制文件 6、文件读取结束判定 四、文件缓冲区 一、…

C++ Reference: Standard C++ Library reference: Containers: map: map: rbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/rbegin/ 公有成员函数 <map> std::map::rbegin C98 reverse_iterator rbegin(); const_reverse_iterator rbegin() const; C11 reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin(…

这个大力神杯,梅西已足足等了16年,AI预测:阿根廷冠军

潘帕斯雄鹰和高卢雄鸡的决战&#xff0c;在三十多小时后即将上演。AI预测&#xff1a;胜率接近&#xff0c;阿根廷略高。 12月18日&#xff0c;卡塔尔世界杯总决赛将正式开战。 由卫冕军法国对上寻求队史第三冠的阿根廷&#xff0c;同时也是两位顶尖球星兼巴黎圣日耳曼队友梅…

LeetCode | 二叉树高频面试算法题汇总【速来】

小伙子&#xff0c;来给我✍棵树【LeetCode】144.二叉树的前序遍历C版本C语言版本&#xff08;递归算法展开图&#xff09;【LeetCode】94.二叉树的中序遍历C版本C语言版本【LeetCode】145.二叉树的后序遍历C版本C语言版本【LeetCode】102.二叉树的层序遍历DSF——深度优先搜索…

Linux 之centos7:一、Linux安装

Linux 之centos7 1.Linux简介 ​ Linux内核最初只是由芬兰人李纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 ​ Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多…

C#,基于视频的目标识别算法(Moving Object Detection)的原理、挑战及其应用

本文概述了基于监控视频之连续帧信息的各种目标识别算法及其存在的问题与挑战&#xff0c;结合实际应用开发的工作&#xff0c;文中给出了实验性基于帧差算法和改进型背景算法的非人工智能目标识别算法的实际效果。 目标识别算法一直并将持续成为人工智能研究与应用的重点&…