数据库安全性与完整性控制仲恺农业工程学院Word文档格式.docx
《数据库安全性与完整性控制仲恺农业工程学院Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据库安全性与完整性控制仲恺农业工程学院Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
![数据库安全性与完整性控制仲恺农业工程学院Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/12/bcdb88ae-7179-475e-aaef-8c0da50644c3/bcdb88ae-7179-475e-aaef-8c0da50644c31.gif)
二、实验内容和步骤
1、新建数据库School并创建学生表Student,包含以下属性:
Sno(CHAR(5))、Sname(CHAR(8))、Ssex(CHAR
(1))、Sage(INT)、Sdept(CHAR(20)),
并插入数据:
('
10000'
'
王敏'
F'
23,'
CS'
),('
王浩'
M'
25,'
EE'
),
创建数据库、表以及插入数据的相关语句为:
CREATEDATABASESchool;
USESchool
CREATETABLEStudent(
SnoCHAR(5),
SnameCHAR(8),
SsexCHAR
(1),
SageINT,
SdeptCHAR(20));
INSERTINTOStudentvalues('
);
INSERTINTOStudentvalues('
执行完上述语句后查看数据库中student表中的数据。
然后再添加约束:
令Sno为主键,查看结果并分析原因。
验证当与现有的数据环境不等时,无法建立实体完整性。
执行上述语句所得的结果:
令Sno为主键的sql语句:
UseSchool
AltertableStudentadd
ConstraintPK_StudentPrimarykey(Sno)
执行结果
分析:
当前的数据环境不满足Sno成为主键,因为数据列Sno不满足实体完整性。
最后,请大家再运行如下语句创建student表:
Droptablestudent;
SnoCHAR(5)primarykey,
定义好表结构后,再执行如下两条插入语句,
分析违反实体完整性时,系统给出了何种处理。
并将王浩的学号改为10001重新插入。
执行上述语句的截图:
2、为了验证多重级联删除,在数据库School中新建StudentCard表,包含以下属性:
CardID(char(14))、Sno(char(5))、RemainedMoney(decimal(10,2)),令CardID为其主键,令Sno为参照Student表的外键,级联删除,并插入数据;
新建ICBCCard表,包含以下属性:
BankID(char(20))、CardID(char(14))、RestoredMoney(decimal(10,2)),令BankID为主键,令CardID为参照StudentCard表的外键,级联删除,并插入数据。
本题大家可以在如下语句上进行完善:
CREATETABLEStudentCard(
CardIDchar(14)PRIMARYKEY,
Snochar(5)REFERENCESStudent(Sno)ondeletecascade,
RemainedMoneydecimal(10,2)
INSERTINTOStudentCardVALUES('
05212567'
'
10001'
120.00);
05212302'
130.50);
执行上述sql语句得的截图:
CREATETABLEICBCCard(
BankIDchar(20)PRIMARYKEY,
CardIDchar(14),
RestoredMoneydecimal(10,2),
FOREIGNKEY(CardID)REFERENCESStudentCard(CardID)ondeletecascade,
INSERTINTOICBCCardVALUES('
9558844022312'
125000.3);
9558844023645'
150000.4);
截图如下:
注意:
请大家在建立外键时,StudentCard表的外键建立的列级,ICBCCard表建立在表级。
3.通过删除Student表中的一条记录,演示三个表的多重级联删除。
Sql:
deletefromStudentwhereSno=’10000’;
Select*fromStudent;
Select*fromStudentCard;
Select*fromICBCCard;
分析:
数据库中School表Student和ICBCCard的外键均设置为级联删除,故删除表Student中某些记录时,系统会自动检查表StudentCard,若找到相应记录则将它们随之删除;
同理表ICBCCard中相应的记录也随之删除。
4.在数据库School中新建Director表,包含以下属性:
Dno(CHAR(5))、Dname(CHAR(8))、Dsex(CHAR
(1))、Dage(INT)、Ddept(CHAR(20)),并自定义3个约束U1、U2和U3,其中U1规定Dno字段不允许取空,U2规定Dage属性的值必须<
=55,U3规定Ddept属性的值唯一。
创建表的语句为:
CREATETABLEDirector(
DnoCHAR(5)constraintU1NOTNULL,
DnameCHAR(8),
DsexCHAR
(1),
DageINTconstraintU2CHECK(Dage<
=55),
DdeptCHAR(20)constraintU3UNIQUE);
本题在上述语句上添加必要的约束然后运行即可。
CONSTRAINTU3(约束名)是为了给出约束的名称,从而方便对该约束进行管理,否则是可以省略的。
5.Director表创建成功后,向其中插入三条数据,请逐一执行如下三条语句:
INSERTINTODirectorvalues('
90000'
赵磊'
45,'
艺术系'
90001'
韩丹'
60,'
中文系'
50,'
观察,三条语句执行时,可以正常插入吗?
如果不能正常插入,为什么?
第一个sql语句正常插入结果如下
第二个sql语句不可以正常插入结果如下:
原因是因为U2规定了Dage属性值必须小于等于55,所以错误!
第三个sql语句不可以正常插入结果如下
:
原因是因为U3规定Ddept属性的唯一性
!
6.修改U2约束,将Dage属性的取值由<
=55改为<
=60。
并重新执行5中的第二条语句:
观察执行结果,为什么?
执行截图如下:
原因是因为U2规定了Dage属性值必须小于等于60,而插入的Dage刚好是60!
所以可以插入!
7.创建规则rule_sex,规定插入或更新的值只能是M或F,并绑定到Director的Dsex字段。
完成后在对象资源管理器中查看School数据库规则设置。
SQL语句:
CREATERULErule_sexas@value=‘F,M’
EXECsp_bindrulerule_sex,‘Director.Dsex’;
8.演示违反规则rule_sex的插入操作。
执行语句:
90002'
蒋坤'
1'
34,'
管理系'
执行结果是什么?
为什么?
系统拒绝插入的原因是插入的数据与规则rule_sex冲突,操作中止!
9.建立一个在teacher表上的触发器tri_T5_teacher,要求当更新一个记录时,表中记录的Sage值要比老记录的Sage值大,因为一般工资级别只能升不能降。
建立该触发器之前,先创建teacher表,创建teacher表的语句为:
CREATETABLETeacher
(
Enonumeric(4)primarykey,
Enamechar(10),
Jobchar(8),
Salnumeric(7,2),
Deductnumeric(7,2),
Deptnonumeric
(2));
执行sql语句结果截图:
建立一个在teacher表上的触发器tri_T5_teacher:
createtriggertri_T5_teacheronTeacherforinsert,update
as
declare@Salnumeric(7,2)
select@Sal=Salfromdeleted
if(@Sal>
(selectSalfrominserted))
begin
Print'
Salmustbehigerthanbefore!
'
rollbacktransaction
end
执行截图:
触发器的创建请参照实验教材P64-66实验3.4以及上课时所讲的实例。
为了如下操作,可恢复数据库LibraryLib。
以下各题要验证各用户的权限,可以借助于查询分析器。
10.在SQLServer对象资源管理器中,设置服务器身份验证为SQLServer和Windows身份验证模式,并以SQLServer身份验证模式登录服务器,登录名和密码均为sa。
步骤:
首先打开SQLServer2000企业管理器,在控制台根目录下右击SQL服务器,在弹出的快捷菜单中选择“属性”命令,则出现“服务