数据库第五次试验:数据库的安全性
前言
为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!
一、实验目的
1、使学生掌握自主存取控制权限的定义和维护方法,加深对数据安全性的理解。
2、掌握数据库的备份与还原操作。
二、实验要求
1、访问权限设置。
2、数据库的备份还原。
三、实验原理、方法和手段
1、SQL Server 新增用户并控制访问权限设置。
(1)新增用户
进入数据库:【安全性】—>【登录名】—>【新建登录名】,如图 5.1 所示
在打开的常规选项卡中,创建登录名。注意设置默认的数据库,如图 5.2 所示。
在【用户映射】下设置该用户所能访问的数据库。并设置架构。点击确认按钮,完成该用户的创建。如图 5.3 所示。
接下来对该用户访问 S-T 数据库中具体的某一个表进行设置。选择该数据库下的表进行设置,右键菜单单击【属性】,如图 5.4。
在【权限】选项中,依次点击【搜索】—>【浏览】—>【选择对象】选中新添加的test 用户,如图 5.5,5.6,5.7 所示。
点击确定按钮,就可以对该表设置对应的权限。设定 test 用户对于该表具有“插入”“更改”“更新”“删除”的权限。点击确定按钮就完成 test 用户对于该表的访问权限的设置。如图 5.8 所示。
右击数据库的连接并选择属性,在安全性中默认是 windows 模式,改选为 sa 和 windows模式点击确定。使用 test 用户登录数据库,登录后只能看到 S-T 的 student 表。如图 5.9,5.10,5.11,5.12 所示。
2、使用 SQL 语句创建用户并授权及回收权限
在SQL Server查询分析器的输入区中输入SQL语句;设置查询分析器的结果区Standard Execute(标准执行)或 Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看结果;如果结果不正确,要进行修改,直到正确为止。
(1)增加登录帐号和密码
EXEC sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ]
例如:EXEC sp_addlogin 'U2','02'
(2)添加一个数据库用户
通过用户映射的操作,使用 sp_grantdbaccess 为登录名在一个具体的数据库中新建用户。例如:
use [S-T]
EXEC sp_grantdbaccess 'U2'
(3)给用户授权
使用 GRANT 语句为用户授权
例如:
use [S-T]
grant insert,update,select,delete on Student to U2
(4) 回收权限
使用 REVOKE 语句回收权限。
例如:
use [S-T]
revoke update(SNO) on Student from U2
3、使用 SQL 语句创建数据库角色与授权
(1) 创建数据库角色
使用 sp_addrole 创建数据库角色
例如:
use [S-T]
EXEC sp_addrole 'G1'
(2) 给数据库角色授权
使用 GRANT 语句为角色授权
例如:
use [S-T]
grant select,update,insert,delete on SC to G1
(3) 将用户加入数据库角色
使用 sp_addrolemember 将用户加入数据库角色,是用户具有角色的权限
例如:
use [S-T]
EXEC sp_addrolemember 'G1','U2'
执行完各个语句之后,可以分别以不同用户的身份登录数据库,进行相关操作,检查系统是否许可。
4、数据库的备份还原
(1)备份“Student”数据库
在窗口左侧的“对象资源管理器”下选中用户数据库“S-T”,单击鼠标右键,选择“任务”下面的“备份”。如图 5.13
在弹出的窗口中选择需要备份的数据库,并修改保存路径(将原有路径删除后重新添加新的路径),单击“确定”按钮完成数据库备份。
(2)还原“S-T”数据库(可先删除“S-T”数据库,后完成还原。)
在 Microsoft SQL Server Management Studio 左侧的“对象资源管理器”下找到“数据库”,单击鼠标右键,选择“还原数据库”。
如图 5.16 所示,在“还原数据”窗口输入目标数据库名字,选择“源设备”,找到相应文件。
如图 5.17 所示,点击“添加”按钮,弹出“定位备份文件”对话框。
如图 5.18 所示,找到备份的数据库路径,选中 S-T1 数据库,点击“确定”按钮。
勾选用于还原的备份集,点击“确定”按钮,完成数据库的备份。如图 5.19,5.20 所示。
四、实验组织运行要求
本实验属于验证型实验,通过实验,加强对课堂讲授知识的理解。开始实验前,必须进行预习,实验过程中,先集中由老师进行具体要求和注意事项的讲解,然后各自独立在机器上完成实验。实验过程中出现问题,在实验指导老师帮助下解决。
五、实验条件
(1)硬件条件:个人计算机。
(2)软件条件:Windows;MS SQL Server。
六、实验步骤
1、基本操作实验
(1)建立用户并授权
建立登录帐号 U1、U2、U3、U4、U5、U6、U7 和对应的数据库 S-T 的用户 dbu1、dbu2、dbu3、dbu4、dbyu5、dbu6、dbu7。
在 SYSTEM(即 DBA)与七个用户之间进行授权。
- 把查询 Student 表的权限授给用户 U1。
- 把对 Student 表和 Course 表的全部操作权限授予用户 U2 和 U3。
- 把对表 SC 的查询权限授予所有用户。
- 把查询 Student 表和修改学生学号的权限授给用户 U4。
- 把对表 SC 的 INSERT 权限授予 U5,并允许 U5 将此权限再授予其他用户。
- 用户 U5 将对表 SC 的 INSERT 权限授予 U6,并允许将权限转授给其他用户。
- 用户 U6 将对表 SC 的 INSERT 权限授予 U7。
- 在授权之后验证用户是否拥有了相应的权限。
(2) 回收权限。
将(1)授予的权限部分收回,检查回收后,该用户是否真正丧失了对数据的相应权限。
1)收回用户 U4 修改学生学号的权限。
2)收回所有用户对表 SC 的查询权限。 - 收回用户 U5 对 SC 表的 INSERT 权限。
4)在回收权限之后验证用户是否真正丧失了该权限。
(3)数据库角色的创建与授权。
1)创建数据库角色 G1。
2)给数据库角色授权,使得数据库角色 G1 拥有对 Student 表的 SELECT、UPDATE、INSERT 的权限。
3)将用户 U1,U3,U7 添加到数据库角色 G1 中来。
4)对数据库角色 G1 的权限进行修改,增加对 Student 表的 DELETE 权限,并回收对Student 表的 INSERT 权限。
(4)实现数据库的备份和还原 2、提高操作实验
对自设计的数据库应用项目,用 SQL 语句进行授权及回收权限。
七、思考题
1、写出实现所有操作要求的 SQL 语句。
八、实验报告
1、基本操作实验
(1)建立用户并授权
建立登录帐号 U1、U2、U3、U4、U5、U6、U7 和对应的数据库 S-T 的用户 dbu1、dbu2、dbu3、dbu4、dbyu5、dbu6、dbu7。
EXEC sp_addlogin 'U1','01'
use ST
EXEC sp_grantdbaccess 'U1','dbu1'
EXEC sp_addlogin 'U2','02'
use ST
EXEC sp_grantdbaccess 'U2','dbu2'
EXEC sp_addlogin 'U3','03'
use ST
EXEC sp_grantdbaccess 'U3','dbu3'
EXEC sp_addlogin 'U4','04'
use ST
EXEC sp_grantdbaccess 'U4','dbu4'
EXEC sp_addlogin 'U5','05'
use ST
EXEC sp_grantdbaccess 'U5','dbu5'
EXEC sp_addlogin 'U6','06'
use ST
EXEC sp_grantdbaccess 'U6','dbu6'
EXEC sp_addlogin 'U7','07'
use ST
EXEC sp_grantdbaccess 'U7','dbu7'
在 SYSTEM(即 DBA)与七个用户之间进行授权。
1)把查询 Student 表的权限授给用户 U1。
use ST grant select on Student to dbu1
2)把对 Student 表和 Course 表的全部操作权限授予用户 U2 和 U3。
use ST grant insert,update,select,delete on Student to dbu2,dbu3 grant insert,update,select,delete on Course to dbu2,dbu3
3)把对表 SC 的查询权限授予所有用户。
use ST grant select on SC to public
4)把查询 Student 表和修改学生学号的权限授给用户 U4。
use ST grant select,update(SNO) on Student to dbu4
5)把对表 SC 的 INSERT 权限授予 U5,并允许 U5 将此权限再授予其他用户。
use ST grant insert on SC to dbu5 with grant option
6)用户 U5 将对表 SC 的 INSERT 权限授予 U6,并允许将权限转授给其他用户。
use ST grant insert on SC to dbu6 with grant option
7)用户 U6 将对表 SC 的 INSERT 权限授予 U7。
use ST grant insert on SC to dbu7
8)在授权之后验证用户是否拥有了相应的权限。
1.把查询 Student 表的权限授给用户 U1。
2.把对 Student 表和 Course 表的全部操作权限授予用户 U2 和 U3。
3.把对表 SC 的查询权限授予所有用户。
4.把查询Student表和修改学生学号的权限授给用户U4。
5.把对表SC的INSERT权限授予U5,并允许U5将此权限再授予其他用户。
6.用户 U5 将对表 SC 的 INSERT 权限授予 U6,并允许将权限转授给其他用户。
7.用户 U6 将对表 SC 的 INSERT 权限授予 U7。
(2) 回收权限。
将(1)授予的权限部分收回,检查回收后,该用户是否真正丧失了对数据的相应权限。
1)收回用户 U4 修改学生学号的权限。
use ST revoke update(SNO) on Student from dbu4
2)收回所有用户对表 SC 的查询权限。
use ST revoke select on SC from public
3)收回用户 U5 对 SC 表的 INSERT 权限。
use ST revoke insert on SC from dbu5 cascade
4)在回收权限之后验证用户是否真正丧失了该权限。
1.收回用户 U4 修改学生学号的权限。
2.收回所有用户对表 SC 的查询权限。
3.收回用户 U5 对 SC 表的 INSERT 权限。
(3)数据库角色的创建与授权。
- 创建数据库角色 G1。
use ST EXEC sp_addrole ‘G1’
2)给数据库角色授权,使得数据库角色 G1 拥有对 Student 表的 SELECT、UPDATE、INSERT 的权限。
use ST grant select,update,insert,delete on Student to G1
3)将用户 U1,U3,U7 添加到数据库角色 G1 中来。
use ST
EXEC sp_addrolemember 'G1','dbu1'
EXEC sp_addrolemember 'G1','dbu3'
EXEC sp_addrolemember 'G1','dbu7'
4)对数据库角色 G1 的权限进行修改,增加对 Student 表的 DELETE 权限,并回收对Student 表的 INSERT 权限。
use ST grant delete on Student to G1 revoke insert on Student from G1 cascade
(4)实现数据库的备份和还原
1.数据库的备份:
备份结果如下图所示:
2.数据库的还原:
2、提高操作实验
对自设计的数据库应用项目,用 SQL 语句进行授权及回收权限。
1.新建登录账号U1和对应的数据库librarydb的用户dbu1
EXEC sp_addlogin 'U1','01'
use librarydb
EXEC sp_grantdbaccess 'U1','dbu1'
在system对其进行授权,把查询book表的授权给用户U1:
use librarydb grant select on book to dbu1
收回用户U1对book表的查询权限
use librarydb revoke select on book from dbu1