实验4 数据库安全保护实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4 数据库安全保护实验
一、实验目的和要求
(1)通过实验使学生加深对数据完整性的理解;
(2)掌握使用SQL语句进行数据库权限授予和回收的方法;
(3)掌握使用SQL语句进行视图建立;
(4)掌握SQL Server中数据库备份和恢复的方法。

二、实验内容和步骤
数据库的安全性是指保护数据库,以防止不合法的使用所造成的数据泄露、更改或破坏。

系统安全保护措施是否有效是数据库系统的主要指标之一。

数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性,是紧密联系、相互支持的。

对于数据库管理来说,保护数据不受内部和外部侵害是一项重要的工作。

SQL Server 正日益广泛地应用于各种场合,作为SQL Server的数据库系统管理员,需要深入理解SQL Server的安全性控制策略,以实现安全管理的目标。

SQL Server包含各种精确的可配置的安全功能。

使用这些功能,管理员可实施针对其所处环境的特定安全风险优化的深度防御。

SQL Server 2008具有了最新的安全技术,以保证数据的安全。

微软公司利用自己Windows操作系统产品的安全性设置,将SQL Server的安全性建构在其上,并且增加了专门的数据安全管理等级。

这些机制保证了数据库的访问层次与数据安全。

SQL Server安全策略是通过系统的身份验证实现的。

身份验证是指当用户访问系统时,系统对该用户的账号和口令的确认过程。

身份验证的内容包括确认用户的账号是否有效、能否访问系统、能访问系统的哪些数据等。

身份验证模式是指系统确认用户的方式。

SQL Server系统是基于Windows操作系统的,这样SQL Server的安全系统可以通过两种方式实现:SQL Server和Windows结合使用以及只使用Windows。

Windows系统用户能否访问SQL Server系统,取决于SQL Server系统身份验证方式的设置。

Windows 身份验证模式只允许使用Windows身份验证方式。

此时,用户无法以SQL Server的登录账号登录服务器。

它要求用户登录到Windows系统,当用户访问SQL Server 时,不用再次登录。

虽然用户仍会被提示登录,但SQL Server的用户名会自动从用户网络登录ID中提取。

Windows 身份验证模式最适用于只在部门访问数据库的情况。

与SQL Server 身份验证方式相比,Windows身份验证方式具有下列优点:提供了更多的功能,如安全确认和口令加密、审核、口令失效、最小口令长度和账号锁定;通过增加单个登录账号,允许在SQL Server系统中增加用户组;允许用户迅速访问SQL Server系统,而不必使用另一个登录账号和口令。

混合身份验证模式既允许使用Windows身份验证方式,又允许使用SQL Server身份验证方式。

它使用户既可以登录SQL Server,也可用Windows的集成登录。

当使用混合模式时,无论是使用Windows身份验证方式的用户,还是使用SQL Server
身份验证方式的用户,都可以连接到SQL Server系统上。

也就是说,身份验证模式是对服务器来说的,而身份验证方式是对客户端计算机来说的。

查看与更改身份验证模式
(1)在【对象资源管理器】面板中,展开服务器结点,右键鼠标,快捷菜单中执行【属性】命令。

(2)在【服务器属性】对话框中,选择【安全性】,窗口右侧即会显示出当前的身份验证模式。

注:设置改变后,用户必须停止并重新启动SQL Server服务,设置才生效。

创建SQL Server登录
一、创建Windows系统账户登录
(1)打开【计算机管理】面板,找到【本地用户和组】,右键单击【用户】,执行快捷菜单中的【新用户】命令,按下图所示新建【TEST】用户。

(2)启动并登录SQL Server Management Studio,在【对象资源管理器】面板中展开【安全性】分支。

(3)鼠标右键单击【登录名】分支,在弹出的快捷菜单中选择【新建登录名】命令,弹出【登录名-新建】对话框,选中【Windows身份验证】单选按钮,单击【搜索】按钮。

(4)在弹出的【选择用户或组】对话框中点击【高级】按钮。

(4)单击【立即查找】按钮,在搜索结果中选择【TEST】,确定操作。

(5)观察实验结果。

在【安全性】分支中已可看到新建的【TEST】登录名,验证实验成功。

二、创建标准登录账户
假设要在SQL Server系统中新加一个名为MyLog的用户,操作步骤如下。

(1)启动并登录SQL Server Management Studio,在【对象资源管理器】面板中展开【安全性】分支。

(2)右击【登录名】分支,在弹出的快捷菜单中选择【新建登录名】命令,弹出【登录名-新建】对话框。

(3)在【登录名】文本框中输入“MyLog”,点选【SQL Server身份验证】单选按钮,在【密码】与【确认密码】文本框中输入“SO9”。

注意,不要采用与用户名相同的密码,大家在实际使用时要特别留意,因为这样做会大大降低数据库的安全性。

在【默认数据库】下拉列表框中选择【master】选项,也就是当新建的用户登录,所有的默认操作都将是针对数据库master的。

确认操作。

(4)验证实验结果。

(5)退出SSMS,并重新启动,在【SQL Server身份验证】模式下,用MyLog登录服务器。

尝试连接【MASTER】数据库。

尝试连接【MyDB】数据库。

观察结果,分析原因。

利用T_SQL添加SQL Server账号:执行系统存储过程sp_addlogin:
Sp_addlogin login_id[,passwd[,defdb[,deflanguage]]]
如:Sp_addlogin FOX,Saying,pubs
其中:Login_id为注册标识或SQL Server用户名;Passwd为口令,默认口令是NULL (即不需要口令),用户可以在任何时候使用;sp_password系统存储过程改变自己的口令;Defdb指定用户在注册时连接到的默认数据库,如果没有指定默认数据库,则默认数据库是master;Deflanguage说明用户注册到SQL Server时使用的默认语言代码。

修改登录账号的属性
①利用企业管理器:用鼠标双击要修改属性的登录账号,在属性对话框中进行修改。

②利用T_SQL:涉及以下几个系统存储过程:sp_password修改账号口令,sp_defaultdb 修改账号默认数据库,sp_defaultlanguage修改账号默认语言。

其中,系统存储过程sp_password的格式是:
sp_password old_passwd,new_passwd[,login_id]
sp_password Saying,Singing,FOX
删除登录账号
①利用企业管理器:右击要删除的账号,在弹出的快捷菜单中选择“删除”命令,在确认对话框中单击“是”按钮,这个登录账号就永久被删除了。

②利用T_SQL:使用系统存储过程sp_droplogin来删除SQL Server登录账号。

如:
sp_droplogin student
sp_droplogin FOX
启用和禁用登录
要启用、禁用或解锁一个登录的操作步骤:
(1)启动Microsoft SQL Server Management Studio,在【对象资源管理器】视图中,连接到适当的服务器,然后向下浏览至【安全性】文件夹。

(2)展开【安全性】文件夹和【登录名】文件夹以列出当前的登录。

右击【MyLog】,然后从快捷菜单中选择“属性”以查看此登录的属性。

这样会打开“登录属性”对话框。

(3)在【登录属性】对话框左侧列表中选择【状态】选项,打开【状态】页面。

(4)然后可以进行以下操作:
✧要启动登录,在“登录”选项区下选择“启用”单选按钮。

✧要禁用登录,在“登录”选项区下选择“禁用”单选按钮。

(5)最后单击“确定”按钮,完成操作。

修改登录
具体操作步骤如下:
(1)选择Mylog,打开“登录属性”对话框。

(2)单击【登录属性】对话框左侧的【用户映射】选项,可以为当前用户添加一个连接数据库【MyDB】。

(3)切换用MyLog登录连接服务器,观察MYDB数据库。

创建数据库用户
(1) 通过设置“用户映射”指明数据库用户。

首先将【MyDB】数据库【安全性】下面的【MyLog】删除。

(2)选择【MyDB】数据库结点,展开,定位至【安全性】,鼠标右键点击【用户】,执行快捷菜单中的【新建用户】命令。

(3)如下图所示的位置,点击【···】按钮。

(4)在【选择登录名】对话框中,点击【浏览】按钮。

(5)在【查找对象】对话框中,勾选【MyLog】,确定操作。

(6)录入新建的用户名【MyUser】,再次执行【确定】按钮。

(7)观察并确认试验结果。

操作权限
权限分为3种状态:授予、拒绝、撤销,可以使用如下的语句来修改权限的状态。

授予权限(GRANT):授予权限以执行相关的操作。

通过角色,所有该角色的成员继承此权限。

撤销权限(REVOKE):撤销授予的权限,但不会显示阻止用户或角色执行操作。

用户或角色仍然能继承其他角色的GRANT权限。

拒绝权限(DENY):显式拒绝执行操作的权限,并阻止用户或角色继承权限,该语句优先于其他授予的权限。

一、授予权限
语法格式:
GRANT
{ALL|statement[,..n] }
TO security_account[,..n]
试分析以下语句功能:
USE MyDB
Go
GRANT SELECT,INSERT
ON STUDENTS
TO MyUser
GO
切换至MYLOG连接服务器。

按照下图所示执行对应操作,理解权限和授权的含义。

分析为何SQL Server系统对于语法正确的SQL语句会差别对待,允许执行或拒绝执行的依据是什么?
切换至Windows 验证。

分析下语句功能:USE MyDB
Go
GRANT CREATE TABLE
TO MyUser
GO
二、回收权限
REVOKE
{ALL|statement[,..n] }
FROM security_account[,..n]
执行以下语句,分析其功能:
USE MyDB
Go
REVOKE INSERT
ON STUDENTS
FROM MyUser
GO
删除SQL Server登录
当一个用户不再需要具有数据库操作的权限时,在安全管理上要进行用户的删除操作。

下面以删除用户Teacher为例,讲解在SQL Server中删除用户登录的操作步骤。

(1)启动并登录SQL Server Management Studio,在【对象资源管理器】面板中展开【安全性】|【登录名】分支,右击用户名【Mylog】,在弹出的快捷菜单中选择【删除】命令,弹出【删除对象】对话框。

(2)单击【确定】按钮,这个用户就删除了,此时会弹出一个删除登录名提示框。

(3)如果要彻底删除用户,还要展开【数据库】|【MyDB】|【安全性】|【用户】分支,右击【MyUser】,弹出【删除对象】对话框。

单击【确定】按钮,登录名将彻底从系统中删除。

备份数据库
备份就是制作数据库结构和数据的拷贝,以便在数据库遭到破坏时能够修复数据库。

数据库的破坏是难以预测的,因此必须采取能够还原数据库的措施。

一般地,造成数据丢失的常见原因包括以下几种。

软件系统瘫痪
硬件系统瘫痪
人为误操作
存储数据的磁盘被破坏
地震、火灾、战争、盗窃等灾难
用户执行完全的数据库备份,包括所有对象、系统表以及数据。

在备份开始时,SQL Server复制数据库中的一切,而且还包括备份进行过程中所需要的事务日志部分。

因此,利用完整备份还可以还原数据库在备份操作完成时的完整数据库状态。

完整备份方法首先将事务日志写到磁盘上,然后创建相同的数据库和数据库对象及复制数据。

由于是对数据库的完整备份,因而这种备份类型速度较慢,将占用大量磁盘空间。

在对数据库进行完整备份时,所有未完成的事务或者发生在备份过程中的事务都将被忽略。

完整备份是指备份整个数据库,不仅包括表、视图、存储过程和触发器等数据库对象,还包括能够恢复这些数据的足够的事务日志。

完整备份的优点是操作比较简单,在恢复时只需要一步就可以将数据库恢复到以前的状态。

SQL Server2000有数据库完全备份、数据库差异备份、事务日志文件备份、文件及文件组备份等四种形式。

在备份一个数据库之前,需要先创建一个备份设备,然后再去复制要备份的数据库、事务日志、或文件/文件组等,而备份设备可以是磁带、磁盘文件或是网络驱动。

一、备份设备
使用SQL Server Management Studio 创建备份设备的具体步骤如下:
(1)启动SQL Server Management Studio,打开SQL Server Management Studio窗口,并使用windows或者SQL Server 身份验证建立连接。

(2)在“对象资源管理器”视图中,展开服务器的“服务器对象”文件夹
(3)右击“备份设备”,然后从快捷菜单中选择“新建备份设备”,打开“备份设备”对话框,
(4)在“设备名称”文本框中,输入“我的备份”。

设置好目标文件或者保持默认值,这里必须保证SQL Server 2008所选择的硬盘驱动器上有足够的可用空间。

(5)单击“确定”按钮完成创建永久备份设备。

二、数据库的备份
按步骤实现对数据库【MyDB】的备份操作。

(1)启动SSMS,并连接到SQL Server中的数据库。

在【对象资源管理器】中展开【数据库库】结点,右键快捷菜单中执行【新建数据库】命令。

(2)将新建的数据库命名为【MyDB】,其余保留默认设置不变。

(3)在下图所示的位置处,点击【可用数据库】列表,将其由默认的【master】改选为我们刚新建的数据库【MyDB】。

(4)将下面所有的SQL语句复制、粘贴至查询窗口中执行。

CREATE TABLE Students
(
Sno CHAR(5)PRIMARY KEY,
Sname CHAR(20)NOT NULL UNIQUE,
Ssex CHAR(2)CONSTRAINT de_Ssex DEFAULT'男',
Sage INT CHECK (Sage BETWEEN 16 AND 24),
Sdept CHAR(15)CHECK (Sdept IN('电子商务','计算机','数学')) )
CREATE TABLE Courses
(
Cno CHAR(5)PRIMARY KEY,
Cname CHAR(20)NOT NULL,
Pre_Cno CHAR(5)REFERENCES COURSES(Cno),
Credits INT,
);
CREATE TABLE Reports
(
Sno CHAR(5)REFERENCES STUDENTS(Sno),
Cno CHAR(5)REFERENCES Courses(Cno),
Grade INT CHECK (Grade>=0 AND Grade<=100),
CONSTRAINT Sno_Cno PRIMARY KEY(Sno,Cno)
);
INSERT INTO Students VALUES ('S01','王建平','男',21,'电子商务'); INSERT INTO Students VALUES ('S02','刘华','女',19,'电子商务');
INSERT INTO Students VALUES ('S03','范林军','女',18,'计算机');
INSERT INTO Students VALUES ('S04','李伟','男',19,'计算机');
INSERT INTO Courses VALUES('C01','英语',NULL,4);
INSERT INTO Courses VALUES('C05','C++',NULL,3);
INSERT INTO Courses VALUES('C02','数据结构','C05',2);
INSERT INTO Courses VALUES('C03','数据库','C02',2);
INSERT INTO Courses VALUES('C04','DB_设计','C03',2);
INSERT INTO Courses VALUES('C07','操作系统','C05',3);
INSERT INTO Courses VALUES('C06','网络原理','C07',3);
INSERT INTO Reports VALUES('S01','C01',92);
INSERT INTO Reports VALUES('S01','C03',84);
INSERT INTO Reports VALUES('S02','C01',90);
INSERT INTO Reports VALUES('S02','C02',94);
INSERT INTO Reports VALUES('S02','C03',82);
INSERT INTO Reports VALUES('S03','C01',72);
INSERT INTO Reports VALUES('S03','C02',90);
INSERT INTO Reports VALUES('S04','C03',75);
语句执行完毕后,请先检查【MyDB】数据库中是否成功新建三张表,三张表中的数据是否成功录入。

(5)鼠标右键点击要备份的数据库【MyDB】, 在弹出的快捷菜单中选择【任务】/【备份】命令,如下图所示:
(6)进入【备份数据库】对话框,在【常规】选项卡中设置数据库的数据源和备份地址。

下图中,先点击右下角的【添加】按钮。

【选择备份目标】处,点击【···】按钮。

打开了【定位数据库文件】对话框,设置备份路径为D:\,备份文件名为MyBack,确定你的操作。

(7)回到【选择备份目标】对话框,点击【确定】按钮,等待备份成功的提示。

执行下语句,分析其功能:
USE MyDB
GO
TRUNCATE TABLE REPORTS
GO
请同学自己在相应的操作窗口,用相应的方法来验证你的分析。

恢复数据库
(1)鼠标右键单击要恢复的数据库【MyDB】,在弹出的快捷菜单中依次选择【任务】/【还原】/【数据库】命令,如下图所示:
(2)进入【还原数据库】对话框,在【常规】选项卡中,确认还原的目标和源数据库以及用于还原的备份。

(3)在【还原数据库】对话框的【选项】选项卡中,勾选【覆盖现有数据库】复选框。

(4)对数据库【MyDB】的还原成功完成。

分离和附加数据库
看图说话。

参考以下操作截图,结合你的实验过程,请用你的语言描述如何将数据库从服务器上分离出去,又如何将数据库重新附加回来,要求给出详尽步骤。

相关文档
最新文档