数据库实验三--安全性

一、实验目的与要求: 1、设计用户子模式

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

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

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

-- 创建管理员角色
CREATE ROLE 'Admin';

-- 创建客户角色
CREATE ROLE 'Cusm';

-- 创建供货商角色
CREATE ROLE 'Supp';

-- 创建商家销售工作人员角色
CREATE ROLE 'Salor';

2、创建客户视图、供货商视图

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

--客户视图
CREATE VIEW CustomerView AS
SELECT c.customer_id, c.customer_name, o.order_id, o.order_date, o.total_price
FROM Customers c
JOIN Orders o ON c.customer_id = o.customer_id;

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

--供货商视图
CREATE VIEW SupplierView AS
SELECT s.supplier_id, s.supplier_name, p.product_id, p.product_name, p.price
FROM Suppliers s
JOIN Products p ON s.supplier_id = p.supplier_id;

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

GRANT ALL PRIVILEGES ON SalesDB.* TO 'Admin';

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

GRANT SELECT ON SalesDB.Customers TO 'Cusm';
GRANT SELECT ON SalesDB.CustomerView TO 'Cusm';

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

GRANT SELECT ON SalesDB.Suppliers TO 'Supp';
GRANT SELECT ON SalesDB.SupplierView TO 'Supp';

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

GRANT SELECT, INSERT ON SalesDB.Orders TO 'Salor';
GRANT SELECT, INSERT ON SalesDB.OrderDetails TO 'Salor';
GRANT SELECT ON SalesDB.Products TO 'Salor';
GRANT SELECT ON SalesDB.Customers TO 'Salor';

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

-- 创建客户用户
CREATE USER 'C001'@'%' IDENTIFIED BY '123456';
GRANT 'Cusm' TO 'C001'@'%';

-- 创建供货商用户
CREATE USER 'S001'@'%' IDENTIFIED BY '123456';
GRANT 'Supp' TO 'S001'@'%';

-- 创建销售工作人员用户
CREATE USER 'B001'@'%' IDENTIFIED BY '123456';
GRANT 'Salor' TO 'B001'@'%';

-- 创建管理员用户
CREATE USER 'A001'@'localhost' IDENTIFIED BY '123456';
GRANT 'Admin' TO 'A001'@'localhost';

-- 激活角色
SET DEFAULT ROLE ALL TO 'C001'@'%';
SET DEFAULT ROLE ALL TO 'S001'@'%';
SET DEFAULT ROLE ALL TO 'B001'@'%';
SET DEFAULT ROLE ALL TO 'A001'@'localhost';

 1.以下为测试客户的权限

-- 1. 使用客户账户登录
mysql -u C001 -p

-- 2. 设置角色
SET ROLE 'Cusm';

-- 3. 选择的数据库
USE SalesDB;

-- 4. 查询视图(应成功)
SELECT * FROM CustomerView;

测试客户的非法操作(应失败)

UPDATE Customers SET customer_name = '测试' WHERE customer_id = 'C001';
--错误原因:客户角色只有SELECT权限
 

2.以下为测试供货商用户的权限

-- 登录MySQL
mysql -u S001 -p123456

-- 设置角色
SET ROLE 'Supp';

-- 测试查询(应成功)
SELECT * FROM SupplierView;

-- 测试非法操作(应失败)
DELETE FROM Products WHERE product_id = 'P001';
-- 错误原因:供货商角色只有SELECT权限

3.以下为测试销售工作人员用户的权限

-- 登录MySQL
mysql -u B001 -p123456

-- 设置角色
SET ROLE 'Salor';

-- 测试查询和插入(应成功)
SELECT * FROM Orders;
INSERT INTO Orders VALUES ('O005', 'C002', CURDATE(), 180.00);

-- 测试非法操作(应失败)
DELETE FROM Orders WHERE order_id = 'O001';
-- 错误原因:销售角色没有DELETE权限

-- 测试非法操作(应失败)
DELETE FROM Orders WHERE order_id = 'O001';
-- 错误原因:销售角色没有DELETE权限

4.以下为测试管理员用户的权限

-- 登录MySQL
mysql -u A001 -p123456 -h localhost

-- 设置角色
SET ROLE 'Admin';

-- 测试所有操作(应全部成功)
SELECT * FROM Customers;
UPDATE Customers SET phone = '13800138888' WHERE customer_id = 'C001';
DELETE FROM Orders WHERE order_id = 'O005';
CREATE TABLE TestTable (id INT);
DROP TABLE TestTable;

三、实验小结

问题1:角色授权后权限不生效 解决:发现需要先执行SET ROLE命令激活角色,或者在创建用户时使用SET DEFAULT ROLE设置默认角色

问题2:视图创建失败 解决:检查发现表名拼写错误(Products拼成了Product),修正后成功创建

错误1:客户用户尝试更新数据时报错 原因:客户角色只有SELECT权限,没有UPDATE权限

错误2:销售用户尝试删除数据时报错 原因:销售角色只有SELECT和INSERT权限,没有DELETE权限

3.实验收获

角色权限体系的理解: 通过创建Admin、Cusm、Supp、Salor四种角色,深刻理解了基于角色的访问控制(RBAC)模型在实际数据库系统中的实现方式 每种角色对应不同的业务职能,权限分配需遵循最小权限原则

视图的安全价值: 客户视图和供货商视图不仅是数据展示工具,更是重要的安全屏障 视图能有效隐藏底层表结构和敏感字段,实现数据访问的抽象与隔离

权限粒度控制: 管理员的全权限、客户的只读权限、销售人员的增查权限等差异化配置,体现了数据库权限管理的精细度 特别注意到即使是SELECT权限,也可以通过视图进行字段级的控制

这些知识在实际数据库系统开发中非常重要,可以有效保证数据的安全性和完整性。同时,通过实验过程中的错误排查,也提高了我的问题解决能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值