數據庫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.pswp.cn/news/906040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906040.shtml
英文地址,請注明出處:http://en.pswp.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;定義目標框…