合肥师范学院 大数据库实验三

发布时间:   来源:文档文库   
字号:
师学院实验报告
课程名称:数据库原理院(系):计算机学院专业/年级: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_idvarchar4Namevarchar10Departmentvarchar20)三个属性列,
其中Class_id为主码:

CreatetableCLASS(Class_idvarchar(4primarykey,
namevarchar10,departmentvarchar20
;



2执行两次相同的插入操作(000101csc,cs,结果如何;insertintoclass
values(000101csc,cs;






2.使用SQL命令创建一学生互助表,要求:包括学生编号、学生、学生帮助对象的编号,每个学生有且仅有一个帮助对象,
帮助的对象必须是已存在的学生。
createtablestudenthelp(sidchar(10,snamechar(30,
shidchar(10unique,
foreignkey(sidreferencesstudents(sid
;


3.使用STC数据库,修改设置,完成以下2种不同的要求,请写出对应的语句或简述操作过程:
1当更新、删除STU表中记录时,若SC表中有此学生的记录,则拒绝;altertablesc
dropFK_SC_STU;
altertablesc
addconstraintfk_snoforeignkey(snoreferencesstu(sno

ondeletenoactiononupdatenoaction;
2当更新、删除STU表中记录时,若SC表中有此学生的记录,则自动更新或删除;altertablescdropfk_sno;
altertablesc
addconstraintfk_snoforeignkey(snoreferencesstu(snoondeletecascadeonupdatecascade;
4.使用SQL命令完成以下任务:创建Worker表(表结构见指导书P73
createtableworker(numberchar(5,
namechar(8,sexchar(1,sageint,
deparmentchar(20
;

1定义约束U1U2,其中U1规定Name字段取值唯一,U2规定sage字段上限是28
useschool
createtableworker(numberchar(5,
namechar(8constraintu1unique,

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约束;altertableworkerdropu1;


5修改约束U2,令sage的值大于等于0altertableworkerdropu2;

altertableworker
addconstraintu2check(sage>=0;

6创建规则rule_sex,规定更新或插入的值只能是MF,并绑定到Workersex字段;createrulerule_sexasvaluein('F','M'go
execsp_bindrulerule_sex,'worker.[sex]';


7插入2条记录,一条满足规则rule_sex,一条违反规则,观察结果。insertintoworker
values('20163','','n','27','教育部';



insertintoworker
values('20163','','F','25','教育部';



5.使用查询分析器创建触发器并测试,请写出相应的语句:
1Worker表创建触发器T1,当插入或更新表中数据时,保证所操作记录的sage大于0createtriggert1onworkerforinsert,update

as
if(selectsagefrominserted<=0beginprint'年龄必须大于0,否则处理失败!'rollbacktransactionEnd


2Worker表创建触发器T2,禁止删除编号为00001的记录;createtriggert2onworkerfordeleteas
if(selectnumberfromdeleted='00001'beginprint'禁止删除该信息!'rollbacktransactionend


3Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的sage的值大。createtriggert3onworkerforupdateas
if(selectsagefrominserted<=(selectsagefromdeletedbeginprint'操作失败!'rollbacktransactionEnd




6.分别用企业管理器和查询分析器实现用户的标识并测试,请写出相应的操作过程或对应的语句:
1设置SQLSERVER的安全认证模式;
SQLServerManagementstudio窗口中左部的对象资源管理器窗口中展开服务器组,用鼠标右击需要设置的SQL服务器,在弹出的菜单中选择属性项,则出现SQLServer服务属性对话框,SQLServer服务属性对话框中,选择全性选择页,在服务器身份验证一栏选择“SQLServerWindows身份验证单选项。
2建立名为“LiYong”的登录用户、数据库用户,默认访问SCHOOL数据库,密码为“abcd”execsp_addlogin'liyong','abcd','school';execsp_grantdbaccess'liyong';

3取消“LiYong”用户;
execsp_revokedbaccess'liyong';execsp_droplogin'liyong';




7.先以sa登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用户尚未定义,其密码均为123
并加以必要的说明。编号授权用户名被授权用户名
数据库对象名
允许的操作类型
SELECTALLSELECTSELECTSELECTSELECTINSERTUPDATE
能否转授权不能不能不能不能不能
1SAU1Students2SAU2Students3SAPUBLICChoices4SAU3Students5U3U4Students6U4U5Students7SAU6Choices8SAU7Students.sname1execsp_addlogin'u1','123','school';
execsp_grantdbaccess'u1';grantselectonstudentstou1;
2execsp_addlogin'u2','123','school';
execsp_grantdbaccess'u2';grantallonstudentstou2;






3grantselectonchoicestopublic;4execsp_addlogin'u3','123','school';
execsp_grantdbaccess'u3';grantselectonstudentstou3withgrantoption;
5execsp_addlogin'u4','123','school';
execsp_grantdbaccess'u4';grantselectonstudentstou4withgrantoption;
6execsp_addlogin'u5','123','school';
execsp_grantdbaccess'u5';grantselectonstudentstou5
7execsp_addlogin'u6','123','school';
execsp_grantdbaccess'u6';grantinsertonchoicestou6withgrantoption;
8execsp_addlogin'u7','123','school';
execsp_grantdbaccess'u7';
grantupdateonstudents.snametou7

8.创建在SCHOOL数据库中choices上的视图CS_View,授权给计算机系讲授课程号为10010的数据库用户“LiYong,让
其具有视图上的SELECT权限;createviewcs_viewas
select*fromchoices;
grantselectoncs_viewtoliyong;




9.对视图CS_View上的score属性列的UPDATE权限授予用户LiYong可以修改学生成绩,但不能修改其它属性列的值;
grantupdateondbo.[cs_view]([score]toliyong



10.假设SCHOOL数据库中,每个学生的登录名都为自己在STUDENTS表中的sid,实现每个学生只能查询自己选课信息,
不能查询别人的成绩,也不能修改自己的成绩。
createviewCSas
select*fromchoiceswheresid=current_user;grantselectonCS
topublic;



11.结束本次实验
三、实验课后训练
1.自行练习实验指导书P81【实验2.5综合案例】综合案例12.自行练习实验指导书P122【实验3.8综合案例】综合案例;
四、实验报告
1.授权给public与授权给指定用户有什么区别?实际应用中,哪个更安全些?
用户名public指系统的所有当前用户和将来的用户,因此,pubilc的授权隐含着对所有当前用户和将来用户的授权。
默认情况下,被授权的用户无权把此权限授予其他用户,SQL允许使用授予权限来指定权限的接受者可以进一步把权限授予其他用户,如果被收回权限的用户已经把权限授予了其他用户,权限的收回会更加复杂
数据库中的每个用户都属于public数据库角色。如果想让数据库中的每个用户都能有某个特定的权限,则将该权限指派给public角色。如果没有给用户专门授予对某个对象的权限,他们就使用指派给public角色的权限


2.SQLSERVER中的角色有什么作用?
SQLServer提供了两种类型的数据库角色:固定的数据库角色和用户自定义的数据库角色。服务器角色是指根据SQLServer的管理任务,以及这些任务相对的重要性等级来把具有SQlServer管理职能的用户划分为不同的用户组,每一组所具有的管SQLServer的权限都是SqlServer置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。
3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
在实验过程中由于当时登录的用户是LiYong,当准备删除用户时,没有退出LiYong用户,导致删除不了。可能这只是一个简单的错误,但是在实际中还是很容易发生。



本文来源:https://www.2haoxitong.net/k/doc/0a198fb1b34e852458fb770bf78a6529657d3560.html

《合肥师范学院 大数据库实验三.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式