数据库安全性管理

news/2024/3/28 18:04:18/文章来源:https://blog.csdn.net/capture3333/article/details/128095818

一:实验目的

1.掌握账户的建立。

2.掌握权限的分配与回收。

3.掌握数据的备份与恢复。

二:实验内容

1、使用企业管理器完成

(1)用企业管理器(对象资源管理器)建立登录账户:user1,user2,user3。

(2)将user1,user2,user3映射为“syy”数据库的用户。

(3)授予user1,user2,user3具有对S、C、SC三张表的查询权。

(4)授予user1具有对S、C表的插入、删除权。

(5)在“学生-课程”数据库中建立用户角色ROLE1,把S表的插入、删除、查询权授予它,并将user1,user2添加到此角色中。

(6)回收user1对S表的查询权。

(7)备份数据库。

(8)还原数据库。

2、操作步骤:

(1)打开企业管理器(对象资源管理器),点击“安全性”,然后右击“登录”图标,选择“新建登录”。建立三个登录帐户。

(2)在syy数据库中选择安全,右键点击“用户”,在弹出的快捷菜单中选择“新建数据库用户”。把三个登录账户映射为syy数据库的三个用户。

(3)在syy数据库中选中一个用户,右击它,在弹出的快捷菜单中选中“属性”,在对话框中点击“权限”,给这个用户分配权限。另外两个用户也依次进行。在学生-课程数据库中选中“角色”,右击它,在弹出的快捷菜单中选中“新建角色”,建立角色ROLE1,同时将三个用户添加到此角色中。

(4)为了给角色分配权限,可以在右击已经建立好了的角色,选择快捷菜单中的“属性”。点击“权限”,在对话框中给ROLE1分配权限。

(5)使用企业管理器回收user1对S表的查询权。

(6)备份数据库。右击要备份的数据库,从“所有任务”里面选择“备份数据库”,实现对数据库的备份。 

(7)还原数据库。打开企业管理器,选中“数据库”图标,右击它,从快捷菜单中选择“所有任务”中的“还原数据库”,根据备份数据实现数据库的还原。 

(8)导入导出数据。将一个表中的数据导出到一个EXCEL文件中。 可在企业理器中右击要导出的表,在弹出的快捷菜单中选择“所有任务”→“导出数据”,按向导可将表中的数据导出到目的位置。

3、使用查询分析器命令完成

(1)建立一个U1的登录用户、数据库用户

(2)使用相同的方法创建u2,u3,u4,u5

(3)把查询学生表权限授给用户U1

(4)把对学生表和课程表的全部权限授予用户U2和U3

(5)把对表成绩的查询权限授予所有用户

(6)把查询学生表和修改学生学号的权限授给用户U4

(7)把用户U4修改学生学号的权限收回

(8)收回所有用户对表成绩的查询权限

(9)把用户U5对成绩表的INSERT权限收回

(10)分别以u1,u2,u3,u4登录,并测试其权限是否生效

(11)在 MIS 库下创建角色 r_test

(12)授予 r_test对 成绩 表的SELECT访问权限

(13)授予角色 r_test 对 学生 表的 SELECT 权限

(14)添加登录 l_test,设置密码为pwd,默认数据库为MIS

(15)为登录 l_test 在数据库 MIS 中添加安全账户 u_test

(16)添加 u_test 为角色 r_test 的成员

(17)拒绝安全账户 u_test 对 学生 表的 SELECT 权限

/*--完成上述步骤后,用 l_test 登录,可以对表进行所有操作,但无法对学生表查询,虽然角色 r_test 有学生表的select权限,但已经在安全账户中明确拒绝了对学生的select权限,所以l_test无学生表的select权限--*/

(18)从数据库 MIS 中删除安全账户

(19)删除登录 l_test

(20)删除角色 r_test

(21)以管理员用户身份登录,完成以下操作
1) 创建角色testrole, 授予testrole可以在mis中对学生表具有update权限
2) 将用户u1充当testrole角色
3) 以u1登录,并测试其权限是否生效

三:实验平台

操作系统:Windows x64 

DBMS:SQL Server 2016 

四:程序清单、调试和测试结果及分析

四、程序清单:

使用查询分析器命令完成

(1)建立一个U1的登录用户、数据库用户

EXEC sp_addlogin 'U1','123','syy'Use syyExec sp_grantdbaccess 'u1'

(2) 使用相同的方法创建u2,u3,u4,u5

EXEC sp_addlogin 'U2','123','syy'Use syyExec sp_grantdbaccess 'u2'EXEC sp_addlogin 'U3','123','syy'Use syyExec sp_grantdbaccess 'u3'EXEC sp_addlogin 'U4','123','syy'Use syyExec sp_grantdbaccess 'u4'EXEC sp_addlogin 'U5','123','syy'Use syyExec sp_grantdbaccess 'u5'

(3)把查询学生表权限授给用户U1

GRANT   SELECTON  学生TO   U1;

(4)把对学生表和课程表的全部权限授予用户U2和U3

GRANT ALL ON 学生,课程 TO U2, U3;(写法不错,但无法运行,SQLSEVER不允许,必须分开)GRANT ALL ON  学生TO U2,U3;GRANT ALL ON  课程TO U2,U3;(会显示ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。但是成功授予。)

也可以这么做:

GRANT SELECT,DELETE,INSERT,UPDATEON  学生TO U2,U3;GRANT SELECT,DELETE,INSERT,UPDATEON  课程TO U2,U3;

(5)把对表成绩的查询权限授予所有用户

GRANT SELECT ON 成绩 TO PUBLIC;

(6)把查询学生表和修改学生学号的权限授给用户U4

GRANT UPDATE(学号), SELECTON 学生TO U4;

(7)把用户U4修改学生学号的权限收回

REVOKE UPDATE(学号)ON 学生FROM U4;

(8)收回所有用户对表成绩的查询权限

REVOKE SELECTON 成绩FROM PUBLIC;

(9)把用户U5对成绩表的INSERT权限收回

REVOKE  INSERTON 成绩FROM U5 CASCADE;

(10)分别以u1,u2,u3,u4登录,并测试其权限是否生效

测试代码u1,u4已经测试过了,这里只测试u2,u3):

测试U2

/*插入*/insert into 学生 values('991029','田平','女','08/05/1980',101)/*插入学生表*/insert into 学生 values('992133 ','郭黎','男','03/04/1981',102)/*插入学生表*/insert into 学生 values('994099 ','何明','女','04/12/1982',104)/*插入学生表*/insert into 成绩 values('992124','c101',77)/*插入成绩表*/insert into 成绩 values('992124','c102',95)/*插入成绩表*/insert into 成绩 values('992124','c103',45)/*插入成绩表*//*删除*/delete  from 成绩 where 学号 = '992124'/*删除成绩表*/delete  from 学生 where 学号 = '999124'/*删除学生表*//*修改*/update 学生 set 学号='999999' where 学号='994165'/*修改学生表*/update 成绩 set 分数='99' where 学号='991022' AND 课程编号='101'/*修改成绩表*//*查询*/SELECT 学号  FROM 成绩  GROUP BY 学号 HAVING COUNT(*)>=3/*查询成绩表*/SELECT 性别, COUNT (*)AS 人数 FROM  学生 GROUP BY 性别/*查询学生表*/

测试U3:

/*插入*/insert into 课程 values('c105','计算机导论',68,102)/*插入课程表*/insert into 课程 values('c106','数据库',85,102)/*插入课程表*/insert into 课程 values('c107','数据结构',102,102)/*插入课程表*/insert into 课程 values('c108','计算机网络',51,102)/*插入课程表*/insert into 成绩 values('992124','c101',77)/*插入成绩表*/insert into 成绩 values('992124','c102',95)/*插入成绩表*/insert into 成绩 values('992124','c103',45)/*插入成绩表*//*修改*/update 学生 set 学号='999999' where 学号='994165'/*修改学生表*/update 成绩 set 分数='99' where 学号='991022' AND 课程编号='101'/*修改成绩表*/update 课程 set 学时='99' where 课程编号='101'/*修改课程表*//*删除*/delete  from 成绩 where 学号 = '992124'/*删除成绩表*/delete  from 学生 where 学号 = '999124'/*删除学生表*/delete  from 课程 WHERE 课程编号='C104'/*删除课程表*/delete  from 课程 WHERE 课程编号='C105'/*删除课程表*/delete  from 课程 WHERE 课程编号='C107'/*删除课程表*/delete  from 课程 WHERE 课程编号='C108'/*删除课程表*//*查询*/SELECT 学号  FROM 成绩  GROUP BY 学号 HAVING COUNT(*)>=3/*查询成绩表*/SELECT 性别, COUNT (*)AS 人数 FROM  学生 GROUP BY 性别/*查询学生表*/SELECT 课程编号,课程名称 FROM 课程/*查询课程表*/

(11)在syy库下创建角色 r_test

EXEC sp_addrole 'r_test'

(12)授予 r_test对 成绩 表的SELECT访问权限

GRANT ALL ON 成绩 TO r_test(会显示ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。但是成功授予。)

也可以:

GRANT SELECT,DELETE,INSERT,UPDATE ON  成绩 TO r_test

​​​​​​​(13) 授予角色 r_test 对 学生 表的 SELECT 权限

GRANT SELECT ON 学生 TO r_test

(14)添加登录 l_test,设置密码为pwd,默认数据库为syy

EXEC sp_addlogin 'l_test','pwd','syy'

(15)为登录 l_test 在数据库syy中添加安全账户 u_test

EXEC sp_grantdbaccess 'l_test','u_test'

​​​​​​​(16)添加 u_test 为角色 r_test 的成员

EXEC sp_addrolemember 'r_test','u_test'

(17)拒绝安全账户 u_test 对 学生 表的 SELECT 权限

DENY SELECT ON 学生 TO u_test

测试:

SELECT 性别, COUNT (*)AS 人数 FROM  学生 GROUP BY 性别/*查询学生表*/

/*--完成上述步骤后,用 l_test 登录,可以对表进行所有操作,但无法对学生表查询,虽然角色 r_test 有学生表的select权限,但已经在安全账户中明确拒绝了对学生的select权限,所以l_test无学生表的select权限--*/

(18)从数据库syy中删除安全账户

EXEC sp_revokedbaccess 'u_test'

(19)删除登录 l_test

注:不能在登陆状态下删除,会失败。

EXEC sp_droplogin 'l_test'

(20)删除角色 r_test

EXEC sp_droprole 'r_test'

​​​​​​​(21)以管理员用户身份登录,完成以下操作

1) 创建角色testrole, 授予testrole可以在syy数据库中对学生表具有update权限

EXEC sp_addrole 'testrole'GRANT UPDATE ON 学生 TO testrole


2) 将用户u1充当testrole角色

EXEC sp_addrolemember 'testrole','u1'


3) 以u1登录,并测试其权限是否生效

测试代码:

update 学生 set 学号='999999' where 学号='994165'/*修改学生表*/

五、实验分析

(1)SQLServer 错误:15405 无法使用特殊主体'sa' 的解决办法:

直接选择附加进来的数据库,右键属性,如上图,文件--〉所有者--〉选择用户sa,即可用此sa用户登录数据库

(2)SQLServer 错误:15007 user1是无效登录名或没有相应权限.应该先建立登录名,再建立数据库用户。

(3)【SQL Server】还原数据库失败:提示数据库正在使用。解决方法:选中无法还原的数据库,右键属性,选择选项-状态-限制访问-SINGLE_USER,此时数据库前会显示为(单个用户);此时进行数据库还原即可,同时限制访问属性也会默认变更MULTI_USER属性。

4关键字 'TO' (‘,’)附近有语法错误。或者“TO”(‘,’)附近有语法错误。应为DOUBLECOLON,或ID。这是因为SQL Server不支持GRANT ALL

ON TABLE 学生,课程 TO U2,U3;这种写法(MySQL似乎也不可以),但是Oracle上是能运行的。on的后面只能接一个对象,也就是说只能分别授权。另外,用SQL SEVER不能像教材一样加上Table,这是标准SQL和T-SQL的区别

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

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

相关文章

Spark系列之Spark的数据倾斜

title: Spark系列 第九章 Spark的数据倾斜 9.1 Spark调优概述 ​ 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时 Spark 作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题…

2022腾讯全球数字生态大会【存储专场】它来了|预约有礼

它来了!它来了! 2022腾讯全球数字生态大会【存储专场】它来了! 作为腾讯集团产业互联网规格最高、规模最大、覆盖面最广的年度盛会 今年存储专场与您一起探讨 分布式高性能存储与数据分析处理的科技创新和最新成果 存储会场六大亮点&…

PyQt5可视化编程-事件、信号和对话框

一、概述: 所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。…

【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解

一.yaml详细讲解 1.1 什么是yaml? YAML是一种数据序列化语言,通常用于编写配置文件。业界对YAML有不同的看法。有些人会说YAML代表另一种标记语言。其他人认为“YAML不是标记语言”(“YAML并非标记语言”)。“YAML”只是这句话的…

CDMP选修课都有什么?

大家都知道CDMP认证考试有四个级别。分别是A级(基础级)P级(实践级)M级(专业级)F级(大师级)。级别越高,考试难度就越大,分数比例要求也更高,相对应…

Unity ab包加载文本 puerts 自定义loader

输出ab包 他会把你创建的ab包都打包 也就是在这里的创建的 string assetBundleDirectory Path.Combine(Application.streamingAssetsPath, "OutAssetBundles"); if (!Directory.Exists(assetBundleDirectory)) {Directory.CreateDirectory(assetBundleDirectory);…

【HIT-OSLAB-实验中的碎碎念】

文章目录应该养成的好习惯删除 替换 修改 内容时 记得留备份遇到问题要通过文字 图片 等多种途径去记录不同的项目应该在不同的文件夹进行处理代码文档 记得添加一些注释用于说明功能多输出有区别度的提示信息s找bug 先定位错误 再改当一份代码有不同版本的时候 记得说明每份代…

黎曼的几何基础,维度

黎曼的几何基础,让数学领先物理100年,维度是人类最大的障碍 - 知乎 高斯很早就有了“高维几何”的想法,他曾经向他的同事们说起假想完全生活在二维表面上的“书虫”,并想要把这推广到高维空间的几何学中去。然而,由于害…

进程与信号(三)

目录 一、前言 二、Signals 1、Signal Handling(ctrlc.c) 2、Sending Signals (1)alarm.c (2)A Robust Signals Interface (3)ctrlc2.c 3、Signal Sets (1&…

ConstraintLayout布局扩展

相信大家对ConstraintLayout(约束布局)不陌生,这是google推出的一个强大控件,之所以强大其实主要归纳有两点:减少布局层次,能够轻松实现复杂布局。当然在我们实际使用过程中,是否真的减少了布局层次&#x…

FPGA实现图像对比度自动调整,提供2套工程源码和技术支持

目录1.算法原理介绍2.HLS算法实现3.工程1介绍:zynq7100实现4.工程2介绍:Kintex7实现5.上板调试验证6.福利:工程源码获取1.算法原理介绍 使用直方图均衡技术实现 使用直方图均衡技术将原始图像的灰度直方图从比较集中的某个灰度区间变成在全部…

ASCHIP_ISP Tool 工具 使用与更新

系列文章目录 ASCHIP-ISP Tool 版本1 2022 11 26ASCHIP-ISP Tool 版本1 使用说明 2022 11 26 软件介绍 对窗体进行初步配置,配置其大小与显示 一:软件介绍 ASCHIP_ISP Tool 工具是用于具有 ISP 功能型号类型的单片机进行 ISP 更新程序开发实验的配套上位…

[附源码]Python计算机毕业设计SSM隆庆祥企业服装销售管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【网络编程】第二章 网络套接字(socket+UDP协议程序)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

Java-泛型实验

1.定义一个学生类Student,具有年龄age和姓名name两个属性,并通过实现Comparable接口提供比较规则(返回两个学生的年龄差), 定义测试类Test,在测试类中定义测试方法Comparable getMax(Comparable c1, Compar…

Docker-JenKins安装及配置!

Jenkins官网:Jenkins 安装主机配置(官方): 最低: 256 MB 内存 1 GB 的驱动器空间(尽管如果将 Jenkins 作为 Docker 容器运行,则建议至少 10 GB) 小团队推荐: 4 GB …

英文ppt怎么翻译成中文?教你几种ppt翻译方法

ppt文件受到很多人的喜欢是因为它展示起来直观清晰,无论是老师在课堂上使用ppt课件来教学,还是在工作汇报中用ppt文件展示设计的方案或取得的成果。但当我们需要把ppt文档里的文本内容里的外语翻译成中文的时候,我们应该怎么做呢?…

003. 电话号码的字母组合——回溯算法

1.题目链接: 17. 电话号码的字母组合 2.解题思路: 2.1.题目要求: 给定一个仅包含数字 2-9 的字符串 digits ,返回所有它能表示的字母组合。 数字和字母的关系: 例子: 输入:"23" …

[Spring]第二篇:IOC控制反转

简单的说就是,创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转. spring创建对象时,会读取配置文件,配置文件中主要配置接口和实现类的关系,每个接口对相应一个实现类,使用<bean>标签配置,<bean中的id可以随便…

学生选课系统

项目描述 通过项目背景的分析以及了解到现在学校面临的问题&#xff0c;特别需要一个选课管理系统保证学生信息以及各种课程成绩的准确性和实效性&#xff0c;通过利用计算机的高速计算和快速的统计分析&#xff0c;保证学生信息的最新记录。从教职工的角度老考虑&#xff0c;…