数据库实验并发控制与数据库的安全性.docx
《数据库实验并发控制与数据库的安全性.docx》由会员分享,可在线阅读,更多相关《数据库实验并发控制与数据库的安全性.docx(13页珍藏版)》请在冰豆网上搜索。
数据库实验并发控制与数据库的安全性
实验10并发控制与数据库的安全性
〖试验学时〗
2学时
〖目的要求〗
1.学会创建事务。
2.学会定义事务的隔离级别。
3.了解事务模式及锁模式。
4.掌握如何添加、删除和修改数据库用户。
5.掌握如何添加、删除数据库角色以及如何为数据库角色添加和删除用户。
6.掌握如何授予、拒绝和剥夺权限。
7.了解如何管理应用程序角色。
8.掌握通过视图保证数据的安全。
〖实验内容〗
1.创建事务。
(1)执行以下语句,创建一个简单的事务。
(2)在事务t1中,设置一个存储点,如果发生了错误进行回滚时,保证前面的插入行行为不丢失。
2.事务模式。
(1)运行如下语句,查看结果。
可以看到,上例中结果显示为:
所影响的行数为0行,说明一条记录也未插进去。
提示:
在自动提交事务模式下,当遇到的错误是编译错误时,SQLServer回滚的是整个批处理,而不仅仅是一个SQL语句。
(2)运行如下语句,查看结果。
可以看到,上例中结果显示为:
所影响的行数为2行,说明前2条记录插入成功。
提示:
在自动提交事务模式下,当遇到的错误是运行错误时,SQLServer回滚的仅仅是一个SQL语句。
(3)使用显示事务在student_course数据库中添加选课信息,连续运行两次下面例子,并查看结果。
第一次运行:
第二次运行:
(4)使用隐性事务在student_course数据库中添加选课信息,并查看事务数目信息。
提示:
由于隐性事务会占用大量资源,一般情况下不建议使用。
3.用户可以自定义事务隔离级别。
下面定义一个事务的隔离级别为“可重复读”。
4.锁模式。
(1)在student_course数据库中,使用Holdlock对表student加共享锁。
提示:
如果对锁使用不当,非常容易出现死锁。
为了预防死锁的发生,根据对数据加锁时的加锁策略,锁可分为乐观锁和悲观锁。
提示:
乐观锁假设没有发生可能造成死锁的冲突,然后读取数据,处理事务,执行更新,最后检查是否发生冲突。
如果不存在冲突,事务就完成了;如果存在冲突,则重复事务直到没有冲突为止。
采用悲观锁定时,它总是假设存在冲突,使用一个锁定,处理事务,然后解锁。
提示:
在SQLServer中,对于Insert、Update和Delete数据修改语句使用排它锁。
并发事务中,只有一个事务能够获得资源上的排它锁,其他事务不能在加了排它锁的资源上获得共享锁或排它锁。
可以使用Xlock锁定提示,建立对表的排它锁,且在事务或语句结束前一直持有。
(2)在Select语句中使用Xlock锁定提示,悲观锁定SC表。
5.使用企业管理器为SM数据库添加一个数据库用户。
(1)使用对象资源管理器,为Student_course数据库添加一个数据库用户。
(2)使用系统存储过程,为Student_course数据库添加一个数据库用户(先建登录yy)。
提示:
一定要在需要添加用户的数据库中执行sp_grantdbaccess,否则无效。
6.使用对象资源管理器删除数据库用户yy。
此处发现删除不了。
7.使用对象资源管理器为SM数据库创建一个暂无成员的角色specialman
8.将数据库成员yy添加到specialman角色中。
9.删除角色specialman。
删除成员后:
提示:
只能删除用户自定义角色,系统的固定角色不能删除;不能删除一个有成员的角色。
10.在Student_course数据库中创建应用程序角色gradeapp,口令为“password”。
11.将表SC上的所有权限授给角色gradeapp。
SqlServer2008的all权限定义不了。
12.在所用的应用程序中激活角色gradeapp。
提示:
应用程序一旦激活,只有当应用程序与SQLServer断开连接时才被停用。
13.修改应用程序角色gradeapp的口令。
14.删除应用程序角色。
15.练习权限的授予。
(1)把查询student表的权限授给用户yy。
(2)把表SC的全部权限授给用户yy。
(3)把对表SC的查看权限授予所有用户。
(4)把对表SC的插入权限授予用户yy,并允许将此权限再授予其他用户。
(5)把查询表student和更新学号Sno的权限授给用户yy。
16.练习权限的收回。
(1)收回所有用户对表SC的查看权。
(2)收回用户yy查询表student和更新学号Sno的权限。
17.在表Student上创建一个简单的视图,对视图进行加密,并使用对象资源管理器来查看其属性。
18.采用视图机制,使数据库用户yy只能看到表Student中040003班的学生。
〖问题解答〗
1.怎样设置自动提交事务模式?
自动提交事务是SQLServer的默认事务管理模式,只要自动提交事务模式没有被显式或隐性事务代替,则SQLServer连接时仍以该默认管理模式进行操作。
2.SQLServer的权限分为几种?
SQLServer的权限分为3种:
对象权限、语句权限和隐含权限。
3.应用程序角色有什么作用?
与标准数据库角色有什么区别?
SQLServer2005(或SQLServer2000)中设计了应用程序角色的概念,这种安全机制可以指定一个数据库或其中的某些对象只能用某些特殊的应用程序访问,而不能允许用户用任何工具来进行操作,更有利于保证数据的完整性和一致性。
它和标准数据库角色的区别如下。
应用程序角色不包含成员,任何用户都不能加入应用程序角色。
应用程序角色的权限在角色被激活时生效,一个用户是通过有权启动该应用程序而不是通过加入该应用程序角色来获得权限。
应用程序角色在激活时需要口令。
在激活应用程序角色以后,当前用户的一切权限都会消失,代之以应用程序角色的权限。