当前位置: 首页 > news >正文

实验13 数据库权限管理

建立新用户:用户名stu1,密码stu1(登录名login1);用户名stu2,密码stu2(登录名login2)和用户名stu3,密码stu3(登录名login3)
create login login1 with password ='stu1';   --创建sql server 登录create User stu1 for login login1;create login login2 with password ='stu2';create User stu2 for login login2;create login login3 with password ='stu3';create User stu3 for login login3;

在这里插入图片描述

授予stu1对SCORE具有select和insert权限,授予stu1对student具有select,update,insert和delete权限, 授予stu1对Course具有select,update,insert和delete权限,并测试
-- 查询所有数据
SELECT * FROM Score;
SELECT * FROM student;
SELECT * FROM Course;

在这里插入图片描述

-- 授予对 Score 表的 SELECT 和 INSERT 权限
GRANT SELECT, INSERT ON Score TO stu1;
-- 授予对 Student 表的 SELECT, UPDATE, INSERT, DELETE 权限
GRANT SELECT, UPDATE, INSERT, DELETE ON student TO stu1;
-- 授予对 Course 表的 SELECT, UPDATE, INSERT, DELETE 权限
GRANT SELECT, UPDATE, INSERT, DELETE ON Course TO stu1;-- 插入数据示例
INSERT INTO Score (Sno, Cno, Degree) VALUES ('104', '4-101', 88.0);

在这里插入图片描述


INSERT INTO student (Sno, Sname, Ssex, Sbirthday, Class)VALUES ('111', N'张小明', N'男', '2000-01-01', '95031');

在这里插入图片描述


INSERT INTO Course (Cno, Cname, Tno) VALUES ('3-246', N'计算机网络', '804');

在这里插入图片描述


-- 更新数据
UPDATE Score SET Degree = 95 WHERE Sno = '101' AND Cno = '3-105';

在这里插入图片描述


UPDATE student SET Sbirthday = '2000-01-11' WHERE Sno = '111';

在这里插入图片描述


UPDATE Course SET Cname = N'人工智能导论' WHERE Cno = '3-105';

在这里插入图片描述

-- 删除数据
DELETE FROM Score WHERE Sno = '101' AND Cno = '3-105';
DELETE FROM student WHERE Sno = '111';
DELETE FROM Course WHERE Cno = '3-235';

在这里插入图片描述

授予stu2对SCORE具有select权限,授予stu2对student具有select权限, 授予stu2对Course具有select权限;授予stu2对Course具有更新属性CNAME的权限,并测试
 -- 授予对 Score 表的 SELECT 权限
GRANT SELECT ON Score TO stu2;
-- 授予对 Student 表的 SELECT 权限
GRANT SELECT ON student TO stu2;
-- 授予对 Course 表的 SELECT 权限
GRANT SELECT ON Course TO stu2;
-- 授予对 Course 表中 Cname 字段的 UPDATE 权限
GRANT UPDATE (Cname) ON Course TO stu2;-- 切换到 stu2 用户
EXECUTE AS USER = 'stu2';-- 查询所有数据
SELECT * FROM Score;
SELECT * FROM student;
SELECT * FROM Course;
SELECT * FROM teacher;-- 插入 student 数据
INSERT INTO student (Sno, Sname, Ssex, Sbirthday, Class) VALUES ('112', N'张三', N'男', '1995-01-01', '95031');
-- 插入 teacher 数据
INSERT INTO teacher (Tno, Tname, Tsex, Tbirthday, Prof, Depart) VALUES ('801', N'赵教授', N'男', '1970-04-04', N'教授', N'计算机系');
-- 插入 Course 数据
INSERT INTO Course (Cno, Cname, Tno) VALUES ('3-003', N'数字逻辑', '831');

在完成这一部分时,出现了比较大的问题,没有办法获得权限,根据查询资料大致了解到代码执行失败的原因是:权限不足。
核心原因:当前用户权限不足:执行操作的用户(可能是 stu2)没有足够的权限访问或修改特定的数据库对象,特别是涉及到系统对象如 information_schema 和 sys 的查询或修改尝试。通过修改还是没有完成。
在这里插入图片描述

-- 授予用户 stu2 查看定义的权限
GRANT VIEW DEFINITION TO stu2;
-- 检查用户 stu2 的权限
EXEC sp_helprolemember 'db_datareader', 'stu2';
EXEC sp_helprolemember 'db_datawriter', 'stu2';-- 如果需要,可以添加用户到相应的角色中
EXEC sp_addrolemember 'db_datareader', 'stu2';
EXEC sp_addrolemember 'db_datawriter', 'stu2';

在这里插入图片描述

创建数据库角色 Myrole,设置访问student表的select和insert权限,并添加用户成员stu3。以stu3登录查看验证。
create role Myrole;grant select,insert
on student
to Myrole;exec sp_addrolemember Myrole,stu3;select *
from student;insert
into student
values   …;
-- 创建角色 Myrole
CREATE ROLE Myrole;
GO

在这里插入图片描述

-- 授予 Myrole 角色对 student 表的 SELECT 和 INSERT 权限
GRANT SELECT, INSERT ON student TO Myrole;
GO-- 将用户 stu3 添加到 Myrole 角色中
EXEC sp_addrolemember 'Myrole', 'stu3';
GO

在这里插入图片描述


-- 测试 INSERT 权限
INSERT INTO student (Sno, Sname, Ssex, Sbirthday, Class)VALUES ('114', N'赵六', N'男', '2000-05-20', '95031');

在这里插入图片描述

–7.删除登录名login1、login2和login3;删除用户名stu1、stu2和stu3;删除角色Myrole。


drop login login1;drop login login2;drop login login3;drop user stu1;drop user stu2;drop user stu3;drop role Myrole;
实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)

这次数据库实验对我来说确实具有很大的挑战性。从最开始的超级用户创建到后续频繁出现的“权限不足”问题,整个过程让我深刻体会到了数据库安全机制真的是一个很难的实验过程。

在实验初期,我在创建登录名(Login)和数据库用户(User)时就遇到了不少困难。由于对 SQL Server 中登录与用户的映射关系理解不够深入,导致在创建 stu1、stu2 等用户后无法顺利进行操作。后来通过切换至具有管理员权限的账户,我才勉强完成用户的创建和授权工作。

随着实验的推进,我在执行创建角色(CREATE ROLE)、授予权限(GRANT)以及插入、更新、删除数据等操作时,在利用stu1进行操作时是非常顺利的,尽管一开始在插入数据的格式问题卡住了一会,但是凭借着之前十多次的数据库实验,让我很快就找到了错误原因,但是在对stu2和stu3进行操作的时候,我真的多次遭遇“没有执行此操作的权限”的错误提示。起初我对这类错误感到困惑,通过不停地查询解决办法,我执行了几十次可能可以解决的代码,但是始终没有办法正确执行成功,一直都存在错误,不知道是不是因为执行太多代码,导致这个数据库的内部数据已经出现了问题。

我了解到,只有具备 db_owner 或 ALTER ANY ROLE 权限的用户才能创建角色;当普通用户尝试访问或修改数据时,必须由管理员显式授予相应的 SELECT、INSERT、UPDATE、DELETE 权限;在测试权限收回后的行为时,我也更加清晰地理解了权限控制如何影响用户的实际操作能力。

虽然实验过程中遇到了很多阻碍,但在不断调试、验证和修正中,我掌握了数据库权限管理的基本操作(如角色创建、权限授予与回收),虽然最后也没有很好的完成老师要求的实验内容,但是尝试的过程也让我感受到了乐趣与苦恼,毕竟,只要有进步,也算是成功的吧。

总的来说,这是一次非常有价值的学习经历。它不仅加深了我对数据库安全性机制的理解,也让我意识到在实际开发中合理设计权限体系的重要性。也让我意识到我在权限体系设置这方面的学习存在问题,需要花费较多时间学习,补充自己的知识储备,为之后更难的学习过程做好准备。

http://www.xdnf.cn/news/613441.html

相关文章:

  • 告别繁琐操作,一键批量发布!
  • Linux下MySQL的安装与使用
  • 开局插第一个眼侦查对方打野的动态
  • 人脸识别技术合规备案最新政策详解
  • 利用条件编译实现RTT可控的调试输出
  • 20250523-BUG-E1696:无法打开元数据文件“platform.winmd(已解决)
  • 写起来比较复杂的深搜题目
  • 差分数组一文全解析
  • Vue.js教学第十三章:深入解析Vuex,前端状态管理核心指南
  • 分布式事务之Seata
  • 根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)
  • Linux常用命令简介
  • 驱动开发学习20250523
  • C# :HImage转Mat方法
  • python与flask框架
  • 在App Store Connect上编辑多个用户的访问权限
  • leetcode hot100:十四、解题思路大全:真·大全!
  • openCV1-3 图像查找表与色彩表
  • 软考 组合设计模式
  • docker基础
  • 第36节:PyTorch基本张量操作
  • springboot配置mysql druid连接池,以及连接池参数解释
  • Python训练营打卡 Day24
  • CloudCanal RAG x Ollama 构建全栈私有 AI 服务
  • 1.2 控制系统的数学模型
  • 深入理解局域网内流量与链路监控的实战价值
  • 连续质数和
  • python web flask专题-Flask入门指南:从安装到核心功能详解
  • 比特授权云外壳加密支持Android 15!
  • DL00912-基于自监督深度聚类的高光谱目标检测含数据集