柯侧耳倾听者 - 云代码空间
—— 翱翔在Java世界的海洋之上
数据库安全性与并发控制
一 实验目的
1.理解身份验证模式;
2.理解登录账号、服务器角色、数据库角色和数据库用户,以及之间的关系;
3.能够创建登录账号,创建数据库角色;
4.能够为数据库角色和数据库用户分配权限;
5.理解事务的ACID特性;
6.理解commit和rollback的含义;
7.理解并发控制与锁;
二 实验内容
(一) 数据库的安全性:
身份验证模式:
1. 设置数据库服务器的验证方式为windows;
2. 在查询分析器中分别选择windows和Sql server身份验证两种方式登录服务器;
3. 设置数据库服务器的验证方式为sql server和windows;
4. 在查询分析器中分别选择windows和Sql server身份验证两种方式登录服务器;
登录账号、数据库用户和权限:
1. 查看sa的服务器角色和数据库访问权限;
2. 查看各数据库的用户;
3. 理解sa和dbo之间的关系;
sa :管理员管理员帐号,可以管所有的数据库.
dbo :数据库所有者.只能管当前(一个)数据库
4. 新建登录账号temp,密码为temp;
5. 在查询分析器中采用temp用户登录服务器,查看登录效果;
6. 在temp用户的“数据库访问”选项中添加studentxk数据库;
7. 再次在查询分析器中采用temp用户登录服务器,查看登录效果;
8. 执行语句“select * from student”;
9. 在企业管理器中打开studentxk数据库的用户,选中temp用户,为其分配对于student表的select权限;
10. 再次执行语句“select * from student”,查看效果;
11. 执行“select * from course”,查看效果;
角色:
1. 在企业管理器中打开studentxk数据库的角色,新建temprole角色,并为其添加数据库用户temp;
2. 为temprole角色分配对于course表的select权限;
3. 执行“select * from course”,查看效果;
4. 在企业管理器中打开studentxk数据库的角色,新建temprole2角色,并为其添加数据库用户temp;
5. 为temprole角色分配对于course表的select的拒绝权限;
6. 执行“select * from course”,查看效果;
7. 查看temp用户对应的角色,理解一个用户同时拥有不同角色的叠加效果;
(二)并发控制--事务
Commit与rollback
1. 首先运行studentxk..sql,恢复数据库;
2. 删除选课表--xk表中的所有数据;
a) Delete from xk
b) go
3. copy如下语句到查询分析器中,一并执行;
begin transaction TranStart
insert into xk(sno,cno,grade) values('95001','1',92)
save transaction FirstPoint
insert into xk(sno,cno,grade) values('95001','2',85)
rollback transaction FirstPoint
insert into xk(sno,cno,grade) values('95001','3',88)
save tran SecondPoint
insert into xk(sno,cno,grade) values('95002','2',90)
rollback transaction SecondPoint
insert into xk(sno,cno,grade) values('95002','3',80)
commit transaction TranStart
4. 查看xk表,看有几条记录。
5. 理解rollback和commit的含义;
并发控制与锁
1. 从开始菜单打开sql server的事件探查器,新建一个跟踪;
2. 为跟踪添加锁里面的deadlock事件;
3. 打开查询分析器,输入下面代码,以后称为代码1:
begin transaction TranStart
update xk set grade = 85
waitfor delay '000:00:005'
update student set sdept = 'Ma'
commit transaction TranStart
4. 代码1成功执行,体会代码1的含义
5. 打开查询分析器,输入下面代码,以后称为代码2:
begin transaction TranStart
update student set sdept = 'IS'
waitfor delay '000:00:005'
update xk set grade = 80
commit transaction TranStart
6. 代码2成功执行,体会代码2的含义;
7. 开两个查询分析器,一个输入代码1,一个输入代码2;
8. 执行代码1,代码1未执行完时立刻执行代码2;
9. 有一个会报错,为什么报错?
10. 查看事件探查器。
三 实验收获与体会
在实验当中,虽然遇到了一些问题,让自己不知所措,难以解决,但是随着实验的进行,自己对数据库操作有了一定的了解,在老师和同学的细心解答下,我慢慢的解决了在实验当中所遇到的困难,也是自己学习到了更多的知识,操作起来也更加熟练。
在这次的学习当中,我掌握了SQL Server的一些常用的的方法,也学会了很多的SQL语句的知识,以及对数据库中数据更新的一些基本操作,让我对数据库语言有了基本的认识。所以在今后的学习中,要更加努力掌握更多的知识,更好的学好数据库这门课程,多于老师和同学交流。