[数据库实验三]安全性

目录

一、实验目的与要求:

二、实验内容:

三、实验小结


一、实验目的与要求:

1、设计用户子模式

2、根据实际需要创建用户角色用户,授权

3、针对不同级别的用户定义不同的视图,以保证系统的安全性

二、实验内容:

  1. 先创建四类用户角色

管理员角色Admin客户角色Cusm、供货商角色Supp、商家销售工作人员角色Salor

源码:

mysql> create role Admin;

Query OK, 0 rows affected (0.03 sec)

mysql> create role Cusm;

Query OK, 0 rows affected (0.01 sec)

mysql> create role Supp;

Query OK, 0 rows affected (0.00 sec)

mysql> create role Salor;

Query OK, 0 rows affected (0.00 sec)

  1. 创建客户视图、供货商视图

(1)客户视图要求显示所有客户号及对应客户下的所有订单及每个订单的价格

源码:

mysql> create view customers_view as

    -> select customers.c_id as 客户号,orderitems.o_num as 订单号,sum(orderitems.quantity*orderitems.item_price) as 订单价格

    -> from customers

    -> join orders on customers.c_id=orders.c_id

    -> join orderitems on orders.o_num=orderitems.o_num

    -> group by customers.c_id,orderitems.o_num;

效果:

(2)供货商视图要求显示所有供货商号及供货商所供水果信息

源码:

mysql> create view suppliers_view as

    -> select suppliers.s_id as 供应商编号,suppliers.s_name as 供应商名,fruits.f_id as 水果编号,fruits.f_name as 水果名称,fruits.f_price as 水果单价

    -> from suppliers

    -> join  fruits on suppliers.s_id=fruits.s_id;

效果:

3.为以上四类用户角色授予合适的权限,要求:

(1)管理员拥有所有权限:

源码:

mysql> grant all on fruitshop.* to Admin;

Query OK, 0 rows affected (0.01 sec)

效果:

(2)客户只能查看与之相关的信息(基本信息,购买信息)

源码:

mysql> alter view view1 as

    -> select  customers.*, orders.o_num, orderitems.o_item, orderitems.quantity, orderitems.item_price

    -> from customers

    -> join orders on customers.c_id=orders.c_id

    -> join orderitems on orders.o_num=orderitems.o_num

-> where customers.c_id =CAST(USER() AS UNSIGNED int);

Query OK, 0 rows affected (0.01 sec)

mysql> grant select on view1 to Cusm;

Query OK, 0 rows affected (0.00 sec)

效果:

(3)供货商只能查看与之相关的信息(可以查看自己供货的水果信息)。

源码:

mysql> create view view2 as

    -> select suppliers.*,fruits.f_id,fruits.f_name,fruits.f_price

    -> from suppliers

    -> join fruits on suppliers.s_id=fruits.s_id

    -> where suppliers.s_id =CAST(USER() AS UNSIGNED int);

Query OK, 0 rows affected (0.01 sec)

mysql> grant select on view2 to Supp;

Query OK, 0 rows affected (0.01 sec)

效果:

(4)商家销售工作人员可以查看数据库并录入信息,但不能修改、删除

源码:

mysql> grant select , insert on fruitshop.* to Salor;

Query OK, 0 rows affected (0.01 sec)

效果:

4.为每类用户角色至少创建一个用户(新建用户并分配对应的角色,统一设置初始密码为’123456’)

注意:附上源码,创建用户并授权成功后在交互式运行状态下查看每个用户权限并截图

客户用户:C001,任意主机地址,授权为客户角色的所有权限;

供货商用户:S001,任意主机地址,授权为供货商角色的所有权限;

商家销售工作人员用户:B001,任意主机地址,授权为销售工作人员角色的所有权限;

管理员用户:A001,本机,拥有所有权限

源码:

(1)先创建用户:

mysql> create user 'C001'@'%' identified by '123456';

Query OK, 0 rows affected (0.02 sec)

mysql> create user 'S001'@'%' identified by '123456';

Query OK, 0 rows affected (0.01 sec)

mysql> create user 'B001'@'%' identified by '123456';

Query OK, 0 rows affected (0.01 sec)

mysql> create user 'A001'@'localhost' identified by '123456';

Query OK, 0 rows affected (0.01 sec)

(2)给用户授权:

1给管理员用户‘A001’授权

mysql> grant Admin to 'A001'@'localhost';

Query OK, 0 rows affected (0.01 sec)

效果:

2给客户‘C001’授权

mysql> grant Cusm to 'C001'@'%';

Query OK, 0 rows affected (0.00 sec)

效果:

3给供应商’S001’授权

mysql> grant Supp to 'S001'@'%';

Query OK, 0 rows affected (0.00 sec)

效果:

4给商家销售工作人员用户’B001’授权

mysql> grant Salor to 'B001'@'%';

Query OK, 0 rows affected (0.01 sec)

效果:

5.测试

退出已用root账号登陆的MySQL服务器,用这四类用户帐号分别登陆MySQL服务器并测试其功能(在交互式运行状态下测试,先附上测试源码,关键结果截图)。

测试要求:退出root帐号,重新登陆指定帐号,显示当前数据库中所有表,查看权限内某张表内的所有信息,权限内某张表进行增、删、改、查操作并查看能否正确执行这些操作,如果执行错误请说明导致此错误的原因。

注意:每次登录后先设置当前角色,否则无效果:set role 角色名;

测试客户用户:

登录:C:\Users>mysql -uC001 -p123456

登录客户用户’C001’时,因为在customers表格中没有对应的c_id,因此查询的视图为空。结果如下图所示:

登录:C:\Users>mysql -u10001 -p123456

新创建客户用户‘10001’,登录用户’10001’时,对应customers表格中的c_id为10001时的客户信息,查询视图的结果如下图所示,即输出10001的基本信息和购买信息。

测试供货商用户:

登录:C:\Users>mysql -uS001 -p123456

登录供货商用户’S001’时,在Suppliers表格中没有对应的s_id,因此查询的结果为空,如下图所示:

登录:C:\Users>mysql -u101 -p123456

新创建供货商用户‘101’,登录供货商用户’101’时,对应Suppliers表格中的s_id=101时的供货商信息,查询的结果如下图所示,只能进行查询操作,不能进行插入、删除等其他的操作。

测试商家销售工作人员用户:

登录C:\Users>mysql -uB001 -p123456

登录’B001’商家销售工作人员用户,可以查看数据库并录入信息,但不能进行修改、删除操作,如下图所示:

可以查询、插入信息

不能进行修改、删除操作

测试管理员用户:

登录:C:\Users>mysql -uA001 -p123456

登录管理员用户,可以拥有对fruitshop数据库的所有权限,可以进行增、删、改、查操作

三、实验小

1.实验中遇到的问题及解决过程

问题一:在创建第一个视图显示所有客户号及对应客户下的所有订单及每个订单的价格时没有进行求和操作

解决过程:结合实际,把同一个订单中不同的水果总价相加

问题二:

在给客户角色和供货商角色授权时,将客户视图和供货商视图授权给客户角色和供货商角色,使得客户角色和供货商角色都能完成查询操作,但是此时查询到的信息是所有客户或所有供货商的信息,但是客户角色和供货商角色只能查询与之相关的信息,所以需要修改使得客户与查询到的信息对应。

解决过程:通过当前客户或供货商的用户名与查询的信息对应,例如在给供货商角色授权时,使suppliers.s_id=CAST(USER() AS UNSIGNED INT)

  1. 实验中产生的错误及原因分析

错误一:

CREATE OR REPLACE VIEW customers_view AS

SELECT customers.c_id AS 客户号, orderitems.o_num AS 订单号, SUM(orderitems.quantity * orderitems.item_price) AS 订单价格

FROM customers

JOIN orders ON customers.c_id = orders.c_id

JOIN orderitems ON orders.o_num = orderitems.o_num

GROUP BY customers.c_id;

原因分析:在创建视图customers_view时使用group by语句只包含customers.c_id,没有将orderitems.o_num包含进去,这个错误使MySQL 中启用了only_full_group_by 模式。

错误二:

在测试阶段登录用户后没有设置当前角色set role,无法测试

原因分析:没有激活当前角色,需要set role

3.实验体会和收获。

  通过本次实验,了解了在数据库中的视图、角色、用户以及授权等关于安全性的相关知识。在设计视图时,对于不同的用户角色可能需要不同的视图,通过这样保证系统的安全性;同时,在为角色和用户授权时,也需要根据不同的情况授予不同的权利,例如作为管理员,拥有所有权利,作为客户和供货商,拥有查询对应基本信息的权利。同时,在用户登录时,进入系统时也需要通过密码进行鉴别。通过本次实验,实现关于数据库的安全性控制,以防止不规范的操作导致数据泄露、更改和破坏,具有重要学习和使用意义。

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

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

相关文章

SAP ABAP ‘‘ 和 `` 的区别

DATA(LV_01) 100. DATA(LV_02) 200.’ ’ 输出为 Char 输出为 String 如下直接定义赋值就会报错 DATA ls_value TYPE TABLE OF string. *ls_value VALUE #( ( A ) ). "报错行 ls_value VALUE #( ( A ) ).使用的场景:动态SQL取数 DATA OPTION TYPE STRI…

生成速度更快!AI绘画工具新版 SD WebUI Forge 保姆级安装教程,更低的显存更快的生成速度!

大家好,我是程序员晓晓 不知道平时经常使用 SD WebUI 的小伙伴发现没有,随着安装插件和模型越来越多,WebUI 时不时会出现卡顿或爆显存的情况,尤其在低显存的硬件上更加明显,只能不停的重启来解决。 估计是 WebUI 的作…

进击J8:Inception v1算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 了解并学习图2中的卷积层运算量的计算过程了解并学习卷积层的并行结构与1x1卷积核部分内容(重点)尝试根据模…

基于 Redis 实现滑动窗口的限流

⏳ 限流场景:突发流量,恶意流量,业务本身需要 基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库,具有高性能和支持原子操作的特点,非常适合用来实现限流功能。下面是一个使用 Redis 实现…

浅拷贝和深拷贝(Java 与 JavaScript)

一、Java 浅拷贝和深拷贝 在Java中,浅拷贝和深拷贝的主要区别在于对对象的引用和内容的复制方式。 浅拷贝 Java 的类型有基本数据类型和引用类型,基本数据类型是可以由 CPU 直接操作的类型,无论是深拷贝还是浅拷贝,都是会复制出…

海外媒体投稿:提高效果的6个国内外媒体套餐内容方法

媒体推广已经成为每个企业形象宣传产品与服务关键方式之一。国内外媒体套餐内容推广方法提供了许多有效的办法,助力企业能够更好地推广自己的产品。下面我们就详细介绍这其中的6个方法,以帮助提升推广效果。 1.明确目标群体和产品定位在制订推广策略以前…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》例10-9

灰度共生矩阵的相关性 相关性(Correlation) 公式 Correlation ∑ i 1 N g ∑ j 1 N g ( i − μ x ) ( j − μ y ) P ( i , j ) σ x σ y \text{Correlation} \frac{\sum_{i1}^{N_g} \sum_{j1}^{N_g} (i - \mu_x)(j - \mu_y) P(i,j)}{\sigma_x \…

HTML【知识改变命运】02标签/元素说明

html 的标签/元素-说明 1:说明2&#xff1a;标签的使用注意点 1:说明 1&#xff1a;html标签在<>中 2&#xff1a;html标签一般是双标签&#xff0c;如起始标签 结束标签 3&#xff1a;html也有单标签&#xff0c;如 4&#xff1a;双标签之间的文本内容就是html的元素内…

开发微信记账本小程序之技术要点记录

我喜欢极简风格&#xff0c;所以我搭建了这款微信记账本小程序。在开发微信记账本小程序过程中&#xff0c;有一些值得关注的技术要点&#xff0c;我则简而记之。 1、空态界面 在没有数据时&#xff0c;我设计了空状态时的占位提示。 在框架中&#xff0c;我使用了 wx:if&qu…

C++安全密码生成与强度检测

目标 密码生成 // Function to generate a random password std::string generatePassword(int length, bool includeUpper, bool includeNumbers, bool includeSymbols) {std::string lower "abcdefghijklmnopqrstuvwxyz";std::string upper "ABCDEFGHIJKLM…

IP地址的打卡路径是什么?

众多周知&#xff0c;IP地址使我们浏览网站的“必需品”&#xff0c;他会在我们进行网络活动时起到通关文牒一般的作用。那么&#xff0c;放我们进行网络活动时&#xff0c;我们的“通关文牒”上面会在哪些地点留下痕迹&#xff0c;IP地址的流转路径是什么&#xff1f; 第一关…

企业如何选择合适的半导体设计小企业软件

在半导体行业日益精细化与智能化的今天&#xff0c;企业选择合适的半导体设计小企业软件&#xff0c;已成为提升研发效率、缩短产品上市周期、增强市场竞争力的关键。面对市场上琳琅满目的软件产品&#xff0c;企业需从多方面考量&#xff0c;以确保所选软件既能满足当前需求&a…

SpringMVC中出现的sql语句错误

1、原sql语句&#xff1a;select major_id AS majorId ,major_name AS majorName,tuition,dept_id as deptId from tb_major where major_id ? 出现问题&#xff1a;Request processing failed: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQ…

java并发之并发关键字

并发关键字 关键字一&#xff1a;volatile 可以这样说&#xff0c;volatile 关键字是 Java 虚拟机提供的轻量级的同步机制。 功能 volatile 有 2 个主要功能&#xff1a; 可见性。一个线程对共享变量的修改&#xff0c;其他线程能够立即得知这个修改。普通变量不能做到这一点&a…

将Docker镜像推送到阿里云仓库,使用Docker-compose将mysql、redis、jar包整合在一起

进入阿里云&#xff1a; https://cr.console.aliyun.com 阿里云镜像控制台 选择个人实例 创建命名空间 创建镜像仓库 下一步之后&#xff0c;创建我们的本地仓库 创建好之后可以在个人实例里看到我们刚创建好的镜像仓库 点击我们的仓库进去里面&#xff0c;可以看到里面有我们…

4.5 了解大数据处理基本流程

文章目录 1. 引言2. 数据采集2.1 数据库采集2.2 实时数据采集2.3 网络爬虫采集 3. 数据预处理3.1 数据清洗3.2 数据集成3.3 数据归约3.4 数据转换 4. 数据处理与分析4.1 数据处理4.2 数据分析 5. 数据可视化与应用5.1 数据可视化5.2 ECharts框架5.3 课堂作业 6. 结语 1. 引言 …

信息安全工程师(17)密码体制分类

前言 密码体制&#xff0c;也称为密码系统&#xff0c;是信息安全领域中的一个重要概念&#xff0c;用于解决机密性、数据完整性、认证、身份识别、可控性及不可抵赖性等问题。根据加密和解密所使用的密钥是否相同&#xff0c;密码体制主要可以分为两大类&#xff1a;单钥体制&…

【Unity基础】Unity中跨平台使用SQLite(一)

一、概述 游戏中数据存储方案众多&#xff0c;在进行选择时&#xff0c;除了要考虑数据类型外&#xff0c;还要考虑对于跨平台的支持。 对于数据存储方案将在单独文章里介绍&#xff0c;下面只是总结了不同方案的特点。 方法跨平台支持读写能力适合场景特点Resources优秀只读…

c++ 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件&#xff1a; 如何检查两个给定的线段是否相交&#xff1f; c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

PG duckdb插件 pg_quack部署与使用

一.pg_quack简介 pg_quack 是一个创新的 PostgreSQL扩展&#xff0c;它将 DuckDB-—一个嵌入式列式数据库 管理系统集成到PostgreSQL中。这个开源项目为开发者提供了一种在同一个数据 库环境中利用高性能数据处理和存储的新方式,使得在PostgreSQL在OLAP的性能 上得到了很大的提…