数据库3——视图及安全性

视图及安全性

  • 学习内容
  • 学习感受

学习内容

一、实验目的与要求:
1、设计用户子模式
2、根据实际需要创建用户角色及用户,并授权
3、针对不同级别的用户定义不同的视图,以保证系统的安全性

二、实验内容:
1、 先创建四类用户角色:
管理员角色Admin、客户角色Cusm、供货商角色Supp、商家销售工作人员角色Salor。
源码:

create role Admin;
create role Cusm;
create role Supp;
create role Salor;

2、 创建客户视图、供货商视图
(1)客户视图要求显示所有客户号及对应客户下的所有订单及每个订单的价格
源码:

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;select * from customers_view;

效果:
在这里插入图片描述

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

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;select * from suppliers_view;

效果:
在这里插入图片描述

3.为以上四类用户角色授予合适的权限,要求:
(1)管理员拥有所有权限:
源码:

grant all on fruitshop.* to Admin;

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

create 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);grant select on view1 to Cusm;

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

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);grant select on view2 to Supp;

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

grant select, insert on fruitshop.* to Salor;

4. 为每类用户角色至少创建一个用户(新建用户并分配对应的角色,统一设置初始密码为’123456’)
注意:附上源码,创建用户并授权成功后在交互式运行状态下查看每个用户权限并截图
客户用户:C001,任意主机地址,授权为客户角色的所有权限;
供货商用户:S001,任意主机地址,授权为供货商角色的所有权限;;
商家销售工作人员用户:B001,任意主机地址,授权为销售工作人员角色的所有权限;;
管理员用户:A001,本机,拥有所有权限
源码:
1.创建客户

create user 'C001'@'%' identified by '123456';
create user 'S001'@'%' identified by '123456';
create user 'B001'@'%' identified by '123456';
create user 'A001'@'localhost' identified by '123456';

2.给客户授权
2.1给管理员用户‘A001’授权

grant Admin to 'A001'@'localhost';

在这里插入图片描述

2.2给客户‘C001’授权

grant Cusm to 'C001'@'%';

在这里插入图片描述

2.3给供应商’S001’授权

grant Supp to 'S001'@'%';

在这里插入图片描述

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

grant Salor to 'B001'@'%';

在这里插入图片描述

5.测试:
退出已用root账号登陆的MySQL服务器,用这四类用户帐号分别登陆MySQL服务器并测试其功能(在交互式运行状态下测试,先附上测试源码,关键结果截图)。
测试要求:退出root帐号,重新登陆指定帐号,显示当前数据库中所有表,查看权限内某张表内的所有信息,对权限内某张表进行增、删、改、查操作并查看能否正确执行这些操作,如果执行错误请说明导致此错误的原因。
注意:每次登录后先设置当前角色,否则无效果:set role 角色名;

测试客户用户:

mysql -uC001 -p123456

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

我们可以新建一个客户用户‘10001’

create user '10001'@'%' identified by '123456';
grant Cusm to '10001'@'%';

登录用户‘10001’

mysql -u10001 -p123456

对应customers表格中的c_id为10001时的客户信息,查询视图的结果如下图所示,即输出10001的基本信息和购买信息
在这里插入图片描述

可以查询:

select * from view1;

在这里插入图片描述

不能插入:

insert view1 values (10001,'RedHook','200 Street',' Tianjin','300000','LiMing','LMing@163.com',NULL,NULL,NULL,NULL);

在这里插入图片描述

不能修改:

update view1
set c_name='Red'
where c_id=10001;

在这里插入图片描述

不能删除:

delete from view1
where c_id=10001;

在这里插入图片描述

测试供货商用户:

mysql -uS001 -p123456

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

我们可以新创建供货商用户‘101’

create user '101'@'%' identified by '123456';
grant Supp to '101'@'%';

登录供货商用户‘101’

mysql -u101 -p123456

对应Suppliers表格中的s_id=101时的供货商信息,查询的结果如下图所示:
在这里插入图片描述

只能进行查询操作,不能进行插入、删除等其他的操作。
可以查询:

select * from view2;

在这里插入图片描述

不能插入(会报错):

insert view2 values(101,'FastFruit Inc','Tianjin',300000,48075,t4,banana,3,5);

在这里插入图片描述

不能删除(会报错):

drop view view2;

在这里插入图片描述

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

mysql -uB001 -p123456

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

可以查询信息:

select * from customers;

在这里插入图片描述

可以插入信息:

insert customers values(10005,'Bo','福建泉州','靖江','000000','LL',NULL);

在这里插入图片描述

不能修改:

update customers
set c_name='Ao',
c_zip=111111
where c_id=10005;

在这里插入图片描述

不能删除:

drop table customers;

在这里插入图片描述

测试管理员用户:

mysql -uA001 -p123456

登录管理员用户,可以拥有对fruitshop数据库的所有权限,可以进行增、删、改、查操作。
在这里插入图片描述

可以进行查看:

select * from customers;

在这里插入图片描述

可以增加数据:

insert customers values(10006,'Co','福建福州','福清','111111','LL',NULL);

在这里插入图片描述

可以删除数据:

delete from customers
where c_id=10006;

在这里插入图片描述

可以更改数据:

update customers
set c_name='BBo',
c_zip='111111'
where c_id=10005;

在这里插入图片描述

三、实验小结
1.实验中遇到的问题及解决过程
在给客户和供货商分配查询权限时,我们把“客户视图”和“供货商视图”的查看权限分别给了客户角色和供货商角色。这样他们就可以查询了,但有个问题:他们能查到所有客户或所有供货商的信息,这就不太合适了。实际上,我们希望的是:客户只能看到自己的信息,供货商也只能看到自己的信息,而不是大家的信息都能查。
为了解决这个问题,我们做了一个处理:让系统自动根据当前登录用户的用户名,去匹配他自己的客户编号或供货商编号。一个用户名是“10001”的客户登录后,系统就只给他显示客户编号是“10001”的那一行数据。
解决过程:通过当前客户或供货商的用户名与查询的信息对应,例如在给供货商角色授权时,使suppliers.s_id=CAST(USER() AS UNSIGNED INT)。
在这里插入图片描述
在这里插入图片描述

2.实验中产生的错误及原因分析
在测试阶段登录用户后没有设置当前角色set role,无法测试
在这里插入图片描述

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

学习感受

通过本次实验,我深入了解了数据库中视图、角色、用户管理以及权限控制等安全机制。在实际设计中,不同角色的用户需要访问不同的数据内容,因此应根据角色类型创建相应的视图,从而实现数据访问的隔离和系统的安全保障。同时,在为角色和用户分配权限时,也应根据其职责合理控制操作范围,如管理员拥有全面权限,而客户和供货商仅能查询与自身相关的信息。此外,用户登录过程中的身份验证(如密码校验)也是保障系统安全的重要环节。
本次实验不仅加深了我对数据库安全性控制的理解,还提高了我在实际操作中规范管理权限、防止数据泄露和误操作的意识,对后续数据库的设计与维护具有重要的参考价值。

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

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

相关文章

Oracle数据库如何进行冷备份和恢复

数据库的冷备份指的是数据库处于关闭或者MOUNT状态下的备份,备份文件包括数据文件、日志文件和控制文件。数据库冷备份所用的时间主要受数据库大小和磁盘I/O性能的影响。由于数据库需要关闭才能进行冷备份,所以这种备份技术并不适用724小时的系统。尽管冷…

SAP HCM 0008数据存储逻辑

0008信息类型:0008信息类型是存储员工基本薪酬的地方,因为很多企业都会都薪酬带宽,都会按岗定薪,所以在上线前为体现工资体系的标准化,都会在配置对应的薪酬关系,HCM叫间接评估,今天我们就分析下…

FPGA在光谱相机中的核心作用

FPGA(现场可编程门阵列)作为光谱相机的核心控制与加速单元,通过硬件级并行处理能力和动态可编程特性,实现高速、高精度的光谱数据采集与处理。以下是其具体作用分类: 一、高速光电信号处理 ‌实时光谱复原‌ 通过硬…

入门OpenTelemetry——部署OpenTelemetry

OpenTelemetry 部署模式 OpenTelemetry Collector 按部署方式分为 Agent 和Gateway 模式。 Agent 模式 在 Agent 模式下,OpenTelemetry 检测的应用程序将数据发送到与应用程序一起驻留的(收集器)代理。然后,该代理程序将接管并…

Windows 上安装下载并配置 Apache Maven

1. 下载 Maven 访问官网: 打开 Apache Maven 下载页面。 选择版本: 下载最新的 Binary zip archive(例如 apache-maven-3.9.9-bin.zip)。 注意:不要下载 -src 版本(那是源码包)。 2. 解压 Mave…

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程

摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…

轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal

在现代企业级应用中,事件驱动架构(EDA)已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal,它不仅天然整合 Spring Boot,还提供完整的事件生命周期支持&…

集合-进阶

Collection collection的遍历方式 迭代器遍历 不依赖索引 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class mycollection {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> co…

【八股战神篇】Java集合高频面试题

专栏简介 八股战神篇专栏是基于各平台共上千篇面经&#xff0c;上万道面试题&#xff0c;进行综合排序提炼出排序前百的高频面试题&#xff0c;并对这些高频八股进行关联分析&#xff0c;将每个高频面试题可能进行延伸的题目再次进行排序选出高频延伸八股题。面试官都是以点破…

Android之横向滑动列表

文章目录 前言一、效果图二、使用步骤1.xml布局2.代码3.HomeHxBean3.adapter4.item布局5.两个drawable 总结 前言 横向滑动列表有多种实现方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介绍recyclerview。 一、效果图 二、使用步骤…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中

WMNav 是由VLM视觉语言模型驱动的&#xff0c;基于世界模型的对象目标导航框架。 设计一种预测环境状态的记忆策略&#xff0c;采用在线好奇心价值图来量化存储&#xff0c;目标在世界模型预测的各种场景中出现的可能性。 本文分享WMNav复现和模型推理的过程&#xff5e; 下…

英语学习5.17

attract &#x1f449; 前缀&#xff1a;at-&#xff08;朝向&#xff09; &#x1f449; 含义&#xff1a;吸引&#xff08;朝某处拉&#xff09; 例句&#xff1a;The flowers attract bees. &#xff08;花吸引蜜蜂。&#xff09; distract &#x1f449; 前缀&#xff…

【软考 McCabe度量法】

McCabe度量法&#xff08;McCabe’s Cyclomatic Complexity&#xff09;是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度&#xff0c;帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…

解读 TypeScript 枚举Enum

TypeScript 枚举通过命名常量、类型安全和结构化组织&#xff0c;显著提升代码质量。使用时需根据场景选择合适的类型&#xff08;数字、字符串或常量枚举&#xff09;&#xff0c;并权衡性能与动态访问需求。掌握其特性和使用的场景&#xff0c;能在复杂项目中有效提升代码的可…

MODBUS RTU通信协议详解与调试指南

一、MODBUS RTU简介 MODBUS RTU&#xff08;Remote Terminal Unit&#xff09;是一种基于串行通信&#xff08;RS-485/RS-232&#xff09;的工业标准协议&#xff0c;采用二进制数据格式&#xff0c;具有高效、可靠的特点&#xff0c;广泛应用于PLC、传感器、变频器等工业设备…

TCP/UDP协议原理和区别 笔记

从简单到难吧 区别就是TCP一般用于安全稳定的需求&#xff0c;UDP一般用于不那么需要完全数据的需求&#xff0c;比如说直播&#xff0c;视频等。 再然后就是TPC性能慢于UDP。 再然后我们看TCP的原理&#xff08;三次握手&#xff0c;数据传输&#xff0c;四次挥手&#xff0…

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类&#xff0c;在使用Jackson处理json前&#xff0c;我们得先掌握json。 JSON数据类型 类型示例说明字符串&#xff08;String&#xff09;"hello"双引号包裹&#xff0c;支持转义字符&#xff08;如 \n&a…

C语言| 指针变量的定义

C语言| 指针的优点-CSDN博客 * 表示“指向”&#xff0c;为了说明指针变量和它所指向的变量之间的联系。 int * i&#xff1b;//表示指针变量i里面存放的地址&#xff0c;所指向的存储单元里的【数据】。 【指针变量的定义】 C语言规定所有变量&#xff0c;在使用前必须先定…

Java 快速转 C# 教程

以下是一个针对 Java 开发者快速转向 C# 的简明教程&#xff0c;重点对比 Java 与 C# 的异同&#xff0c;帮助你快速上手。 项目结构&#xff1a; .sln &#xff1a;解决方案文件&#xff0c;管理多个项目之间的依赖关系。.csproj &#xff1a;项目文件&#xff0c;定义目标框…