数据库实验 数据控制-安全性部分+ 数据控制-完整性部分+数据备份和恢复

本文详细介绍了在SQL Server 2008 R2环境中,如何通过GRANT和REVOKE语句进行权限管理,演示了用户权限的授予和收回过程。同时,实验涵盖了实体完整性、参照完整性和用户定义完整性的实现,以及数据备份和恢复的步骤,展示了在数据破坏后如何利用备份进行恢复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库实验 数据控制-安全性部分+ 数据控制-完整性部分+数据备份和恢复

一、实验环境
本实验的实验环境为SQL Sever 2008 R2。

二、实验内容与完成情况

一、实验目的

熟悉通过SQL对数据库进行数据控制,包括安全性、完整性和数据库恢复。

二、实验内容

实验一 数据控制-安全性部分

1.实验内容

SQL中使用GRANT和REVOKE语句向用户授予或收回对数据的操作权限。GRANT语句向用户授予权限,REVOKE语句收回已经授予用户的权限。

2.GRANT

GRANT语句的一般格式为
GRANT<权限>[,<权限>]…
ON<对象类型><对象名>[,<对象类型><对象名>]…
TO <用户>[,<用户>]…
[WITH GRANT OPTION];

其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该GRANT语句可以时数据库管理员,也可以该数据库对象创建者(即属主owner),还可以时已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。

如果指定了WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授予其他用户。如果没有指定EITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。

SQL标准允许拥有WITH GRANT OPTION的用户把相应权限或其子集授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先。

我首先假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,操作如图1。
Exec sp_addlogin ‘U1’,‘123456’
Exec sp_addlogin ‘U2’,‘123456’
Exec sp_addlogin ‘U3’,‘123456’
Exec sp_addlogin ‘U4’,‘123456’
Exec sp_addlogin ‘U5’,‘123456’
Exec sp_addlogin ‘U6’,‘123456’

在这里插入图片描述
然后使其成为当前数据库的合法用户,操作如图2。
Exec sp_grantdbaccess ‘U1’
Exec sp_grantdbaccess ‘U2’
Exec sp_grantdbaccess ‘U3’
Exec sp_grantdbaccess ‘U4’
Exec sp_grantdbaccess ‘U5’
Exec sp_grantdbaccess ‘U6’

在这里插入图片描述
(1)把查询Albums表的权限授给用户U1。

GRANT SELECT
ON Albums
TO U1

在这里插入图片描述
(2)把对Albums表的查询和插入权限授给U5用户,并允许将此权限再授予其他用户。
GRANT SELECT,INSERT
ON Albums
TO U5
WITH GRANT OPTION

在这里插入图片描述
下面登录U1。
在图5中可以看出U1没有获得访问select_course数据库的权限。

在这里插入图片描述

在图6中可以看出U1获得查询Albums表的权限。

在这里插入图片描述
在图7中可以看出U1没有获得更新Albums表的权限。

在这里插入图片描述

下面登录U5。
在图8中可以看出U5获得查询Albums表的权限。

在这里插入图片描述
在图9、10中可以看出U5获得插入Albums表的权限。

在这里插入图片描述
在这里插入图片描述
下面验证WITH GRANT OPTION。
U5将查询Albums表功能授予U6。

GRANT SELECT
ON Albums
TO U6

在这里插入图片描述
登录U6,执行查询功能。

在这里插入图片描述

U6并没有获得其他权限,比如UPDATE。

在这里插入图片描述

下面重新登录管理员用户,执行REVOKE。

授予用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为

REVOKE <权限>[,<权限>]…
ON <对象类型><对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]…[CASCADE|RESTRICT];

(3)把用户U1查询Albums的权限收回。

REVOKE SELECT
ON Albums
FROM U1

在这里插入图片描述
(4)把用户U5查询、插入Albums的权限收回,级联收回U6的权限。
REVOLE SELECT,INSERT
ON Albums
FROM U5 CASCADE;

在这里插入图片描述
从图16、17、18中可以看出,U5、U6、U7均已无法访问Albums表。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验二 数据控制-完整性部分

1.实体完整性

关系模型的试题完整性在CREATE TABLE中用PRIMARY KEY定义。对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。对多个属性构成的码只有一种说明方法,即定义为表级约束条件。

例:将Course表中的Cno属性定义为码。

CREATE TABLE Course
(Cno int PRIMARY KEY,
Cname CHAR(20) NOT NULL,
Ccredit int
)

在这里插入图片描述
下面呈现当操作违反了完整性约束条件时,系统是如何处理的。

在这里插入图片描述
2.参照完整性
关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。

例:定义SC中的参照完整性。

CREATE TABLE SC
(Sno nCHAR(10)NOT NULL,
Cno int NOT NULL,
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno)REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
)
在这里插入图片描述

下面呈现当操作违反了参照完整性时,系统是如何处理的。
例如,删除Student表中Sno值为“201215121”的元组,则从要SC表中级联删除SC.Sno=201215121’的所有元组。

在这里插入图片描述
3.用户定义完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。目前的关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。

例:不允许取空值

定义Course表时,Cname不允许取空值。

CREATE TABLE Course
(Cno int PRIMARY KEY,
Cname CHAR(20) NOT NULL,
Ccredit int
)
在这里插入图片描述
下面呈现当操作违反了用户定义完整性时,系统是如何处理的。

在这里插入图片描述
4.CHECK短语
例:Teacher表的Tsex只允许取“男”或“女”。
CREATE TABLE Teacher
(Tno CHAR(6) PRIMARY KEY,
Ssex CHAR(6) CHECK(Ssex in (‘男’,‘女’))
)

在这里插入图片描述
下面呈现当操作违反了CHECK短语用户定义完整性时,系统是如何处理的。

在这里插入图片描述
5.CONSTRANT子句

SQL还在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。

例:建立学生登记表SSStudent,要求学号在1~999之间,姓名不能取空值,年龄小于20,性别只能是“男”或“女”。

CREATE TABLE SSStudent
(Sno NUMERIC(6)
CONSTRAINT CI CHECK(SnO BETWEEN 1 AND 999),Sname CHAR(20)
CONSTRAINT C2 NOT NULL,Sage NUMERIC(3)
CONSTRAINT C3 CHECK(Sage <20),Ssex CHAR(2)
CONSTRAINT C4 CHECK(Ssex IN(‘男’,‘女’)),CONSTRAINT StudentKey PRIMARY KEY(Sno)
)

在这里插入图片描述
下面呈现当操作违反了CONSTRAINT子句时,系统是如何处理的。

在这里插入图片描述
实验三 数据备份和恢复

尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但是计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏仍是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复。恢复子系统是数据库管理系统的一个重要组成部分,而且还相当庞大,常常占整个系统代码的10%以上。数据库系统所采用的恢复技术是否行之有效,不仅对系统的可靠程度起着决定性作用,而且对系统的运行效率也有很大影响,是衡量系统性能优劣的重要指标。

1.创建一个备份设备
USE [master]
GO
EXEC master.dbo.sp_addumpdevice @devtype = N’disk’, @logicalname = N’beifen’, @physicalname = N’D:\beifen.bak’
GO

在这里插入图片描述
2.完整备份实验数据库到备份设备

–备份数据库
USE master
GO
BACKUP DATABASE select_course TO beifen

在这里插入图片描述
3.向实验数据库中某个表插入若干条记录
INSERT
INTO Sstudent
VALUES (‘Bob’,‘Database’,‘1’);
INSERT
INTO Sstudent
VALUES (‘Bob’,‘java’,‘2’);
INSERT
INTO Sstudent
VALUES (‘Bob’,‘C++’,‘3’);

在这里插入图片描述
4.备份数据库事务日志到备份设备,并查看日志格式。

(1) 备份数据库事务日志到备份设备

–备份事务日志
USE master
GO
BACKUP LOG select_course TO beifen;

在这里插入图片描述
(2)查看日志格式

在这里插入图片描述
5.利用第2步所得的完整备份,恢复到插入记录前的状态。
use master
go
—声明变量
declare @dbName nvarchar(max)=‘select_course’;
declare @dbFullName nvarchar(max)=‘D:\beifen.bak’;
–1.1修改为单用模式
exec(N’ALTER DATABASE ‘+@dbName+’ SET SINGLE_USER WITH ROLLBACK IMMEDIATE’);
–1.2结束链接进程
DECLARE @kid varchar(max)
SET @kid=’’
SELECT @kid=@kid+'KILL ‘+CAST(spid as Varchar(10)) FROM master…sysprocesses
WHERE dbid=DB_ID(@dbName) ;
EXEC(@kid) ;
–2.执行还原语句
restore database @dbName from disk=@dbFullName
with replace --覆盖现有的数据库
–3.重置数据库为多用户模式
exec(N’ALTER DATABASE ‘+@dbName+’ SET MULTI_USER WITH ROLLBACK IMMEDIATE’);

在这里插入图片描述
可以看到表中内容已经没有了(刚开始时的表就是空表)。

在这里插入图片描述
6.利用第4步所得的事务日志,恢复到插入记录后的状态

ALTER DATABASE select_course SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE select_course FROM DISK=’D:\beifen.bak’ WITH REPLACE,NORECOVERT
RESTORE LOG select_course FROM DISK=’D:\beifen.bak’ WITH RECOVERY, STOPAT=N’12/1/2020 20:36:00 PM’
ALTER database select_course set online

在这里插入图片描述
三、出现的问题及解决方法
1.在写授权语句时,系统报错,在“TO”附近有语法错误,应为DOUBLECOLON,或ID.。这时把TABLE删除就可以了。
2.在备份数据库时,刚开始备份了一个名字全是中文的数据库,在写代码时无法写出“-”该符号,只能换成备份英文名字的数据库。

一、实验目的 使学生加深对数据库安全性完整性的理解。并掌握SQL Server中有关用户、角色及操作权限的管理方法。熟悉通过SQL语句对数据进行完整性控制。 二、实验内容要求   数据库安全性实验,在SQL Server企业管理器中,设置SQL Server的安全认证模式,实现对SQL Server的用户角色管理,设置管理数据操作权限。   具体内容如下:   设置SQL Server的安全认证模式(Windows或SQL ServerWindows(S)认证模式)。   登录的管理 创建一个登录用户   数据库用户的管理 登陆用户只有成为数据库用户(Database User)后才能访问数据库。每个数据库的用户信息都存放在系统表Sysusers中,通过查看Sysusers表可以看到该数据库所有用户的情况。SQL Server的数据库中都有两个默认用户:dbo(数据库拥有者用户)(dba)。通过系统存储过程或企业管理器可以创建新的数据库用户。   角色的管理 创建一个角色,使创建的用户成为该角色的成员,并授予一定的操作权限。   在学生表中定义主键、外键约束。   在课程表的“课程名”字段上定义唯一约束。   在选课表的“成绩”字段上定义check约束,使之必须大于等于0且小于等于100.“课程号”字段只能输入数字字符。   定义规则,并绑定到读者表的“性别”字段,使之只能取“男、女”值。   在学生表中增加出生日期字段。定义缺省,并绑定到借阅表的“借阅日期”上,使之只能取当前日期。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值