DB3302553李文想.docx
《DB3302553李文想.docx》由会员分享,可在线阅读,更多相关《DB3302553李文想.docx(13页珍藏版)》请在冰豆网上搜索。
DB3302553李文想
《数据库系统概论》实验报告
题目:
实验3:
视图操作和安全性控制
姓名
班级
学号
日期
李文想
10010905
2009302553
2011-10-13
目的和要求
1.掌握使用图形用户界面和SQL语言创建,操作和删除视图的方法。
2.掌握SQLServer中的安全性相关的登录名,角色以及用户的创建以及使用方法。
3.学会使用T-SQL语句对数据库和表操作的灵活控制功能。
实验准备
1.了解与视图相关的各种SQL语句。
2.了解登录名,角色以及用户的创建以及使用方法。
3.了解T-SQL语句在对数据库和表的控制权限相关命令(GRANT/REVOKE)的用法。
实验内容和步骤结果
1.在Student数据库中,利用图形用户界面,创建一个选修了数据库课程并且是1986年出生的学生的视图,视图中包括学号,性别,成绩这三个信息。
(5分)
具体步骤:
在ManagementStudio的对象资源管理器中,展开student数据库,单击“视图”,右击,从弹出的快捷菜单中选择“新建视图”菜单项,出现如图3-10所示的新建视图对话框,在该对话框中,通过选定一个或者多个表,指定字段,设定连接或限制条件,最后单击保存工具按钮,给视图取个名字,就完成了视图的创建,如图3-11所示。
图3-10设计视图前选定表
图3-11交互式设计视图
运行结果:
2.用两种不同的SQL语句创建课本128页第11题中要求的视图(视图名:
V_SPJ)(6分,每种方法3分)。
SQL源码:
createviewv_spjasselectsno,pno,qtyfromspj,jwherespj.jno=j.jnoandj.jname='三建'
OR
createviewvv_spjasselectsno,pno,qtyfromspjwherejnoin(selectjnofromjwherej.jname='三建')
运行结果:
3.用SQL语句完成课本128页第11题中对视图V_SPJ的查询(4分,每小题2分)。
(1)找出三建工程项目使用的各种零件代码及其数量;
SQL代码:
select*fromv_spj
运行结果:
(2)找出供应商s1的供应情况。
SQL代码:
selectpno,qtyfromv_spjwheresno='S1';
运行结果:
4.用T-SQL语句操作视图的数据。
(15分,每题5分)
(1)给视图V_SPJ中增加一条数据(基本表中有插入的数据即可);
SQL代码:
insertintov_spj(sno,pno,qty)values('S3','P2',100);
运行结果:
由于基本表中插入的数据JNO是NULL,所以视图中看不到新插入的数据
(2)修改视图V_SPJ中的任意一条数据的供应数量;
SQL代码:
updatev_spjsetqty=200wheresno='S3';
运行结果:
(3)删除视图V_SPJ中的任意一条数据。
SQL代码:
deletefromvv_spjwheresno='S5'andpno='P3';
运行结果:
5.在图形用户界面中创建新登录名以及用户。
(20分,每题10分)
(1)对于数据库company创建P148页第8题中所需要用到的各个用户以及相关的关的登录名。
(假定有数据库company,库中有两个表e(职工表)和d(部门表));
步骤如下:
①启动ManagementStudio,分别展开“服务器”、“数据库”、“安全性”、“用户”,在“用户”文件夹下能看到该数据库的已用用户;②右击“用户”文件夹,选择“新建数据库用户”,弹出“数据库用户-新建”对话框;③输入要创建的数据库用户的名字,然后在“登录名”对应的文本框中输入相应的登录名,或者单击“浏览”按钮,在系统中选择相应的登录名;④单击“确定”按钮,将新创建的数据库用户添加到数据中。
图3-12所示创建登录名loginname2
图3-13所示创建company数据库李勇用户
(2)用图形用户界面完成以下的权限赋予:
(a)用户王明对两个表有Select和Insert的权力;
图3-14所示授予用户王明对d表有Select和Insert的权力
图3-15所示授予用户王明对e表有Select和Insert的权力
(b)用户李勇对职工表具有Select权力,对工资字段具有更新权力
T图3-15
图3-16
6.用T-SQL语句授权和收回权限并加以验证。
(50分,每题5分)
(1)用户李勇对两个表有insert和delete权力;
SQL源码:
grantinsert,deleteoneto李勇
grantinsert,deleteondto李勇
(2)每个职工只对自己的记录有select权力;
SQL源码:
createviewv_employeeasselect*fromewhereename=CURRENT_USER
grantselectonv_employeetopublic
(3)用户刘星对职工表有select权力,对工资字段具有更新权力;
SQL源码:
grantselect,update(esalary)oneto刘星
(4)用户周平具有对两个所有权力(读、插、改、删数据),并具有给其他用户授权的权力;
SQL源码:
grantallprivilegesoneto周平withgrantoption
(5)用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权力,他不能查看每个人的工资;
SQL源码:
createviewv_salaryasselectedepno,max(esalary)maxsal,min(esalary)minsal,avg(esalary)avgsalfromegroupbyedepno
grantselectonv_salaryto杨兰
(6)撤销每个职工对自己记录的select权力;
SQL源码:
createviewv_employeeasselect*fromewhereename=CURRENT_USER
revokeselectonv_employeetopublic
(7)撤销用户刘星对职工表有select权力,对工资字段具有更新权力;
SQL源码:
revokeselect,update(esalary)onefrom刘星
(8)撤销用户周平具有对两个所有权力(读、插、改、删数据),并具有给其他用户授权的权力;
SQL源码:
revokeallprivilegesonefrom周平cascade
(9)撤销用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权力,他不能查看每个人的工资;
SQL源码:
createviewv_salaryasselectedepno,max(esalary)maxsal,min(esalary)minsal,avg(esalary)avgsalfromegroupbyedepno
revokeselectonv_salaryfrom杨兰
dropviewv_salary
实验中出现的问题以及解决方案
(1)sbirth(data)>=1986-01-01&&sbirth<=1986-12-12将student表的学生的出生日期限定在1986年;
(2)创建新的用户时,必须先创建一个登录名与之对应,并且两者是一一对应的关系;
例,:
compant数据库下创建新的用户杨兰,首先在“安全性”目录下创建新的登陆名,如loginname5,然后才能在company数据库下的“用户”目录下添加新的用户;
(3)实验室环境下,混合模式不能连接成功,此问题实验过程中未能解决;
实验过程中的一些感受:
本次试验的最大体会就是深刻体会到视图机制对RDBMS的重要意义,通过定义视图,使得数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作;再者,有了视图机制,就可以在设计数据应用系统时,对于不同的用户定义不同的视图,是机密数据不出现在不应该看到这些数据的用户视图上,即是视图机制自动提供了对机密数据的安全保护功能。