合肥师范学院 数据库实验三.docx
《合肥师范学院 数据库实验三.docx》由会员分享,可在线阅读,更多相关《合肥师范学院 数据库实验三.docx(15页珍藏版)》请在冰豆网上搜索。
合肥师范学院数据库实验三
合肥师范学院实验报告
姓名:
课程名称:
数据库原理院(系):
计算机学院专业/年级:
2014计算机科学与技术(嵌入式班)
实验三——数据库完整性与安全性(4课时)
一、实验目的
1.理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完整性的实现,了解违反完整性的结果;
2.掌握MSSQLSERVER中的有关用户登录认证及管理方法,熟练使用自主存取控制进行权限管理;
二、实验预习内容
在认真阅读教材及实验指导书【2.1实体完整性】、【2.2参照完整性】、【2.3用户自定义完整性】、【2.4触发器】、【2.5综合案例】和【3.1用户标识与鉴别】、【3.2自主存取控制】、【3.3视图机制在自主存取控制上的应用】、【3.4Public角色在安全性中的应用】、【3.8综合案例】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库
1)创建一张新表CLASS,包括Class_id(varchar(4)),Name(varchar(10)),Department(varchar(20))三个属性列,其中Class_id为主码:
CreatetableCLASS(Class_idvarchar(4)primarykey,
namevarchar(10),
departmentvarchar(20)
);
2)执行两次相同的插入操作(’0001’,’01csc’,’cs’),结果如何;
insertintoclass
values(’0001’,’01csc’,’cs’);
2.使用SQL命令创建一张学生互助表,要求:
包括学生编号、学生姓名、学生帮助对象的编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。
createtablestudenthelp(sidchar(10),
snamechar(30),
shidchar(10)unique,
foreignkey(sid)referencesstudents(sid)
);
3.使用STC数据库,修改设置,完成以下2种不同的要求,请写出对应的语句或简述操作过程:
1)当更新、删除STU表中记录时,若SC表中有此学生的记录,则拒绝;
altertablesc
dropFK_SC_STU;
altertablesc
addconstraintfk_snoforeignkey(sno)referencesstu(sno)
ondeletenoaction
onupdatenoaction;
2)当更新、删除STU表中记录时,若SC表中有此学生的记录,则自动更新或删除;
altertablesc
dropfk_sno;
altertablesc
addconstraintfk_snoforeignkey(sno)referencesstu(sno)
ondeletecascade
onupdatecascade;
4.使用SQL命令完成以下任务:
创建Worker表(表结构见指导书P73)
createtableworker(numberchar(5),
namechar(8),
sexchar
(1),
sageint,
deparmentchar(20)
);
1)定义约束U1、U2,其中U1规定Name字段取值唯一,U2规定sage字段上限是28;
useschool
createtableworker(
numberchar(5),
namechar(8)constraintu1unique,
sexchar
(1),
sageintconstraintu2check(sage<=28),
deparmentchar(20),
constraintpk_workerprimarykey(number))
2)插入一条合法记录;
insertintoworker
values('20161','王丽','n','23','科技部');
3)插入一条违反U2约束的记录,简述观察到的结果如何?
并分析原因;
insertintoworker
values('20162','李民','n','30','办公部');
4)去除U1约束;
altertableworker
dropu1;
5)修改约束U2,令sage的值大于等于0;
altertableworker
dropu2;
altertableworker
addconstraintu2check(sage>=0);
6)创建规则rule_sex,规定更新或插入的值只能是M或F,并绑定到Worker的sex字段;
createrulerule_sex
as@valuein('F','M')
go
execsp_bindrulerule_sex,'worker.[sex]';
7)插入2条记录,一条满足规则rule_sex,一条违反规则,观察结果。
insertintoworker
values('20163','李敏','n','27','教育部');
insertintoworker
values('20163','李敏','F','25','教育部');
5.使用查询分析器创建触发器并测试,请写出相应的语句:
1)为Worker表创建触发器T1,当插入或更新表中数据时,保证所操作记录的sage大于0;
createtriggert1onworker
forinsert,update
as
if(selectsagefrominserted)<=0
begin
print'年龄必须大于0,否则处理失败!
'
rollbacktransaction
End
2)为Worker表创建触发器T2,禁止删除编号为00001的记录;
createtriggert2onworker
fordelete
as
if(selectnumberfromdeleted)='00001'
begin
print'禁止删除该信息!
'
rollbacktransaction
end
3)为Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的sage的值大。
createtriggert3onworker
forupdate
as
if(selectsagefrominserted)<=(selectsagefromdeleted)
begin
print'操作失败!
'
rollbacktransaction
End
6.分别用企业管理器和查询分析器实现用户的标识并测试,请写出相应的操作过程或对应的语句:
1)设置SQLSERVER的安全认证模式;
在SQLServerManagementstudio窗口中左部的“对象资源管理器”窗口中展开服务器组,用鼠标右击需要设置的SQL服务器,在弹出的菜单中选择“属性”项,则出现SQLServer服务属性对话框,在SQLServer服务属性对话框中,选择“安全性”选择页,在“服务器身份验证”一栏选择“SQLServer和Windows身份验证”单选项。
2)建立名为“LiYong”的登录用户、数据库用户,默认访问SCHOOL数据库,密码为“abcd”;
execsp_addlogin'liyong','abcd','school';
execsp_grantdbaccess'liyong';
3)取消“LiYong”用户;
execsp_revokedbaccess'liyong';
execsp_droplogin'liyong';
7.先以sa帐号登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用户尚未定义,其密码均为123),并加以必要的说明。
编号
授权用户名
被授权用户名
数据库对象名
允许的操作类型
能否转授权
1
SA
U1
Students
SELECT
不能
2
SA
U2
Students
ALL
不能
3
SA
PUBLIC
Choices
SELECT
不能
4
SA
U3
Students
SELECT
能
5
U3
U4
Students
SELECT
能
6
U4
U5
Students
SELECT
不能
7
SA
U6
Choices
INSERT
能
8
SA
U7
Students.sname
UPDATE
不能
1)execsp_addlogin'u1','123','school';
execsp_grantdbaccess'u1';
grantselectonstudentstou1;
2)execsp_addlogin'u2','123','school';
execsp_grantdbaccess'u2';
grantallonstudentstou2;
3)grantselectonchoicestopublic;
4)execsp_addlogin'u3','123','school';
execsp_grantdbaccess'u3';
grantselectonstudentstou3
withgrantoption;
5)execsp_addlogin'u4','123','school';
execsp_grantdbaccess'u4';
grantselectonstudentstou4
withgrantoption;
6)execsp_addlogin'u5','123','school';
execsp_grantdbaccess'u5';
grantselectonstudentstou5
7)execsp_addlogin'u6','123','school';
execsp_grantdbaccess'u6';
grantinsertonchoicestou6
withgrantoption;
8)execsp_addlogin'u7','123','school';
execsp_grantdbaccess'u7';
grantupdateonstudents.snametou7
8.创建在SCHOOL数据库中choices上的视图CS_View,授权给计算机系讲授课程号为’10010’的数据库用户“LiYong”,让其具有视图上的SELECT权限;
createviewcs_view
as
select*fromchoices;
grantselectoncs_viewtoliyong;
9.对视图CS_View上的score属性列的UPDATE权限授予用户“LiYong”,可以修改学生成绩,但不能修改其它属性列的值;
grantupdateondbo.[cs_view]([score])toliyong
10.假设SCHOOL数据库中,每个学生的登录名都为自己在STUDENTS表中的sid,实现每个学生只能查询自己选课信息,不能查询别人的成绩,也不能修改自己的成绩。
createviewCS
as
select*fromchoiceswheresid=current_user;
grantselecton
CS
topublic;
11.结束本次实验
三、实验课后训练
1.自行练习实验指导书P81【实验2.5综合案例】综合案例1;
2.自行练习实验指导书P122【实验3.8综合案例】综合案例;
四、实验报告
1.授权给public与授权给指定用户有什么区别?
实际应用中,哪个更安全些?
用户名public 指系统的所有当前用户和将来的用户,因此,对pubilc的授权隐含着对所有当前用户和将来用户的授权。
在默认情况下,被授权的用户无权把此权限授予其他用户,但SQL允许使用授予权限来指定权限的接受者可以进一步把权限授予其他用户,如果被收回权限的用户已经把权限授予了其他用户,权限的收回会更加复杂
数据库中的每个用户都属于public数据库角色。
如果想让数据库中的每个用户都能有某个特定的权限,则将该权限指派给public角色。
如果没有给用户专门授予对某个对象的权限,他们就使用指派给public角色的权限
2.SQLSERVER中的角色有什么作用?
SQLServer提供了两种类型的数据库角色:
固定的数据库角色和用户自定义的数据库角色。
服务器角色是指根据SQLServer的管理任务,以及这些任务相对的重要性等级来把具有SQlServer管理职能的用户划分为不同的用户组,每一组所具有的管理SQLServer的权限都是SqlServer内置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。
数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。
3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
在实验过程中由于当时登录的用户是LiYong,当准备删除用户时,没有退出LiYong用户,导致删除不了。
可能这只是一个简单的错误,但是在实际中还是很容易发生。