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

上传人:b****4 文档编号:24195262 上传时间:2023-05-25 格式:DOCX 页数:15 大小:477.07KB
下载 相关 举报
合肥师范学院 数据库实验三.docx_第1页
第1页 / 共15页
合肥师范学院 数据库实验三.docx_第2页
第2页 / 共15页
合肥师范学院 数据库实验三.docx_第3页
第3页 / 共15页
合肥师范学院 数据库实验三.docx_第4页
第4页 / 共15页
合肥师范学院 数据库实验三.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

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

《合肥师范学院 数据库实验三.docx》由会员分享,可在线阅读,更多相关《合肥师范学院 数据库实验三.docx(15页珍藏版)》请在冰豆网上搜索。

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

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

合肥师范学院实验报告

姓名:

课程名称:

数据库原理院(系):

计算机学院专业/年级:

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用户,导致删除不了。

可能这只是一个简单的错误,但是在实际中还是很容易发生。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1