数据库第三次实验报告Word格式文档下载.docx
《数据库第三次实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库第三次实验报告Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
![数据库第三次实验报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/29/cc06ac48-b438-4cab-b0fb-c45be3035c3b/cc06ac48-b438-4cab-b0fb-c45be3035c3b1.gif)
2.掌握SQLServer中的安全性相关的登录名,角色以及用户的创建以及使用方法。
3.学会使用T-SQL语句对数据库和表操作的灵活控制功能。
实验准备
1.了解与视图相关的各种SQL语句。
2.了解登录名,角色以及用户的创建以及使用方法。
3.了解T-SQL语句在对数据库和表的控制权限相关命令(GRANT/REVOKE)的用法。
实验内容和步骤结果
1.在Student数据库中,利用图形用户界面,创建一个选修了数据库课程并且是1986年出生的学生的视图,视图中包括学号,性别,成绩这三个信息。
(5分)
具体步骤:
在ManagementStudio的对象资源管理器中,展开student数据库,单击“视图”,右击,从弹出的快捷菜单中选择“新建视图”菜单项,出现所示的新建视图对话框,在该对话框中,通过选定一个或者多个表,指定字段,设定连接或限制条件,最后单击保存工具按钮,给视图取个名字,就完成了视图的创建,如图3-11所示。
设计视图前选定表
选中选修数据库并且是1986年生的学生
2.用两种不同的SQL语句创建课本128页第11题中要求的视图(视图名:
V_SPJ)(6分,每种方法3分)。
SQL源码:
createviewV_SPJasselectSNO,PNO,QTY
from供应情况表SPJ,工程项目表J
where供应情况表SPJ.JNO=工程项目表J.JNO
and工程项目表J.JNAME='
三建'
第二种
from供应情况表SPJ
whereJNOin(selectJNOfrom工程项目表Jwhere
工程项目表J.JNAME='
)
运行结果:
3.用SQL语句完成课本128页第11题中对视图V_SPJ的查询(4分,每小题2分)。
(1)找出三建工程项目使用的各种零件代码及其数量;
SQL代码以及运行结果
(2)找出供应商s1的供应情况。
SQL代码以及运行结果:
4.用T-SQL语句操作视图的数据。
(15分,每题5分)
(1)给视图V_SPJ中增加一条数据(基本表中有插入的数据即可);
SQL代码:
insertintoV_SPJ(sno,pno,qty)values('
s3'
'
p2'
100)
由于基本表中插入的数据JNO是NULL,所以视图中看不到新插入的数据
(2)修改视图V_SPJ中的任意一条数据的供应数量;
updateV_SPJsetqty=400wheresno='
s2'
(3)删除视图V_SPJ中的任意一条数据。
deletefromV_SPJwheresno='
orsno='
5.在图形用户界面中创建新登录名以及用户。
(20分,每题10分)
(1)对于数据库company创建P148页第8题中所需要用到的各个用户以及相关的关的登录名。
(假定有数据库company,库中有两个表e(职工表)和d(部门表));
步骤如下:
①启动ManagementStudio,分别展开“服务器”、“数据库”、“安全性”、“用户”,在“用户”文件夹下能看到该数据库的已用用户;
②右击“用户”文件夹,选择“新建数据库用户”,弹出“数据库用户-新建”对话框;
③输入要创建的数据库用户的名字,然后在“登录名”对应的文本框中输入相应的登录名,或者单击“浏览”按钮,在系统中选择相应的登录名;
④单击“确定”按钮,将新创建的数据库用户添加到数据中。
所示创建登录名username1
创建company数据库刘星用户
(2)用图形用户界面完成以下的权限赋予:
(a)用户王明对两个表有Select和Insert的权力;
所示授予用户王明对e表有Select和Insert的权力
所示授予用户王明对e表有Select和Insert的权力图和上图类似。
(b)用户李勇对职工表具有Select权力,对工资字段具有更新权力
6.用T-SQL语句授权和收回权限并加以验证。
(50分,每题5分)
(1)用户李勇对两个表有insert和delete权力;
grantinsert,delete
one
to李勇
ond
E表的图类似上图,为节省空间,忽略此图。
(2)每个职工只对自己的记录有select权力;
createviewV_company
asselect*frome
where姓名=CURRENT_USER
grantselectonV_companytopublic
注意以上两行必须分开运行,因为create和grant语句不能一起执行。
(3)用户刘星对职工表有select权力,对工资字段具有更新权力;
grantselect,update(工资)
to刘星
(4)用户周平具有对两个所有权力(读、插、改、删数据),并具有给其他用户授权的权力;
grantall
to周平
withgrantoption
虽然已经提示了all应用不是很好,但是还没有找到解决方法。
(5)用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权力,他不能查看每个人的工资;
createviewV_salary
as
select职工号,MAX(工资)maxsal,min(工资)minsal,avg(工资)avgsalfromegroupby职工号
grantselectonV_salaryto杨兰
同样以上两行代码必须分开运行。
理由同上
(6)撤销每个职工对自己记录的select权力;
revokeselectonV_companytopublic
dropV_company
(7)撤销用户刘星对职工表有select权力,对工资字段具有更新权力;
revokeselect,update(工资)
(8)撤销用户周平具有对两个所有权力(读、插、改、删数据),并具有给其他用户授权的权力;
revokeall
cascade
cascade对应的是withgrantoption,只有这样才可以删除周平的对应关系。
图形类似刘星的图形,因为什么数据都没有,所以此图省略。
(9)撤销用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权力,他不能查看每个人的工资;
revokeselectonV_salaryto杨兰
dropV_salary
实验中出现的问题以及解决方案
(1)第一题,在约束出生的年份的时候,只有或的关系,并没有与之对应<
=1986-12-31&
&
>
=1986-1-1所以只能先创建了一个或关系。
解决方法:
之后,发现代码中出现了OR的名词,所以把这个改为了AND,之后图形界面操作自动更正为了有两个sbirth选项,之后意识到这样就可以表示与的关系了。
(2)创建用户的时候,必须要有与之对应的登录名。
并且一个登录名只能对应一个用户。
(3)视图的操作太糟糕了,因为视图实际上只是一个虚表,不直接依赖于表中的数据,所以只能删除,不能添加(虽然添加数据的时候提示有一行受到了影响,但是等到删除的时候,却不提示此行被删除,而且视图上也不显示)。
所以当不小心误删的时候,只能去重新创建视图。
实验过程中的一些感受:
本次实验中对数据库的视图有了了解,虽然不是太懂,但是可以针对视图进行授权,从而解决了很多的安全问题。
但是对视图的数据操作不是一个明知的选择。
同时发现图形操作和SQL代码结合起来可以对问题的解决提供很大的帮助。