实验五实验十实验报告.docx
- 文档编号:13056142
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:46
- 大小:899.26KB
实验五实验十实验报告.docx
《实验五实验十实验报告.docx》由会员分享,可在线阅读,更多相关《实验五实验十实验报告.docx(46页珍藏版)》请在冰点文库上搜索。
实验五实验十实验报告
实验五
实验十
数据库完整性与安全性实验
存储过程与触发器实验
实验目的:
1.通过对完整性规则的定义实现,熟悉了解SQLServer数据库中实体完整性、参照完整性、断言等完整性保证的规则和实现方法,加深对数据完整性的理解。
2.通过对安全性相关内容的定义,熟悉了解SQLServer数据库中安全性的内容和实现方法,加深对数据库安全性的理解。
实验内容:
(一)、完整性实验与要求:
一、建表阶段
1.利用SQL语句,分别定义数据库中各基本表的主键、候选键、外键,实现实体完整性约束和参照完整性约束。
2.在数据库中选取两张或三张具有外键关联的表,利用语句foreignkey-references创建外键,实现参照完整性约束。
3.根据实际背景,对某些表中的某些特定属性,定义空值、非空约束。
4.建表时,使用check谓词,通过断言,添加如下一些约束:
(1)1个MSC最多管理10个BSC。
(2)1个BSC最多管理50个小区/扇区。
(3)1个BTS可以连接至1-3个BSC。
(4)1个MS可以位于1到6个BTS的覆盖范围内。
(5)小区/扇区所使用的频点号在[1,124]之间。
二、主键/候选键约束验证
1.选取定义了主键的关系表,向该表插入在主属性上取值为空的元组,观察系统反应;选取表中某些或某个元组,修改这些元组在主属性上的取值,或插入新元组,使这些元组与表中已有其它元组的主属性取值相同,观察系统反应;
2.选取定义了候选键的关系表,向该表插入在候选键属性上取值为空的元组,观察系统反应;选取表中某些或某个元组,修改这些元组在候选键属性上的取值,或插入新元组,使这些元组与表中已有其它元组的候选键属性取值相同,观察系统反应;
三、外键约束验证
1.选取相互间定义了外键关联的一组表,分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。
上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。
2.观察级联操作对外键约束的影响
1)对相互间定义了外键关联关系的一组表,分别使用
foreignkey-references
ondeletecascade
onupdatecascade
oninsertcascade
语句创建级联外键约束。
2)分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。
上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。
三、check/触发器约束验证
选取建表阶段定义的2个断言约束,对断所涉及的元组属性做插入、删除、更新操作,观察当违反断言、触发器约束条件时,DBMS的反映和关系表内元组数据的变化(对触发器)。
(二)、安全性实验内容与要求:
SQLServer数据库实验:
SQLServer提供了多种安全机制。
主要的有如下3条:
1.最小权限原则:
SQLServer通过给不同用户赋予不同权限的方式来保证安全。
本原则要求只给某用户完成工作所必须的权限,以尽量减小用户有意或无意的错误对数据库造成的损害。
2.CIA原则:
C:
机密性,未授权者或使用非法手段无法访问数据。
I:
完整性,未授权者或使用非法手段无法修改数据。
A:
可用性,已授权者可随时使用数据。
3.深度防护:
实际上任何一个程序都运行在操作系统上,一台计算机上还有其它应用程序。
所以SQLServer的安全不能仅仅考虑本身的安全,而必须结合操作系统安全及其它相关因素(比如杀毒软件和防火墙)来考虑。
这就是深度防护。
SQLServer仅仅运行在Windows操作系统上,允许直接使用Windows用户作为SQLServer用户,由于是同一公司的产品,其和操作系统的联系和配合特别紧密,为其它数据库所远远不及的。
在SQLServer服务器及其它Windows服务器上,应该进行多方面的安全配置:
包括操作系统补丁管理、管理员用户和组管理、其它本地用户组管理和设置本地安全策略。
为了提供网络上的客户端访问,还需要进行端点等相关设置。
SQLServer对两种实体提供安全机制。
分别是登录名(以前曾称为login,现在在T-SQL中仍然这样使用,但为避免混淆,Microsoft已经开始改称其为服务器主体)和用户名(user,就是数据库主体)。
现在有3种登录名:
windows域登录名(就是域用户),windows本地登录名(本地用户)和SQLServer登录名。
用户登录以后,SQLServer将其映射为自己的user,进行相应安全管理。
从而提供了两种身份认证模式:
Windows认证模式和SQLServer认证模式。
1.Windows认证模式
SQLServer数据库系统通常运行在NT服务器平台或基于NT构架的Windowsserver上,而NT作为网络操作系统,本身就具备管理登录、验证用户合法性的能力,所以Windows认证模式正是利用这一用户安全性和账号管理的机制,允许SQLServer也可以使用NT的用户名和口令。
在该模式下,用户只要通过Windows的认证就可连接到SQLServer,而SQLServer本身也不需要管理一套登录数据。
2.SQLServer认证模式
在SQLServer认证模式下,用户在连接到SQLServer时必须提供建立在SQLServer上的用户名(登录名)和登录密码,这些登录信息存储在系统表syslogins中,与NT的登录账号无关。
SQLServer自己执行认证处理,如果输入的登录信息与系统表syslogins中的某条记录相匹配则表明登录成功。
注:
该方式常用于系统开发中,因为客户机常常与服务器不是同一台计算机,甚至也不在同一个windows域中,所以使用该方式进行登录比较方便。
实验内容:
(1)以DBA身份(可以是SQLServer上的sa或者windows上的系统管理组的某个成员)登陆系统,在图形界面下创建新登录,新建登录用户可以使用Windows认证模式和SQLServer认证模式。
(2)使用T-SQL命令createloginlogin-name…和createloginlogin-namefromwindows重复第1步的内容。
(3)在服务器角色选项卡中赋予新建用户角色。
完成后查找T-SQL中对应命令,在图形界面上撤消该权限后使用命令完成授予权限和收回权限的任务。
(4)将新建用户映射到移动通信数据库某用户。
执行相关SQL操作,检查该用户的权限。
用户在权限范围内、超出权限范围访问相应数据对象,查看访问结果和DBMS的反映。
(5)对特定服务器对象设置权限,双击登录名以后选择安全对象,赋予该登录名对服务器内的某个对象的权限。
执行相关SQL操作,检查该用户的权限。
用户在权限范围内、超出权限范围访问相应数据对象,查看访问结果和DBMS的反映。
(6)分别在图形化界面、命令行中,撤销用户权限。
(7)分别在图形化界面、命令行中,删除数据库用户。
(8)根据实际操作,指出服务器角色和数据库角色有多少种,分别有什么权限?
(9)创建数据库时,还会自动创建SYS、GUEST和dbo组。
通过帮助文档,了解这些组在数据库中起到的作用。
(10)以DBA身份登陆系统,创建用户组,为用户组授予(grant)或撤销(revoke)针对数据库中表、视图等不同数据对象的不同访问权限。
(11)将组成员资格授予现有用户或组,现有用户或组访问数据库对象,查看访问结果。
撤销现有用户或组的组成员资格,查看访问结果。
(12)分别在图形化界面、命令行中,从数据库删除组。
(13)分别采用Windows认证方式和SQLServer认证方式用不同的用户进行登录连接。
(14)创建数据库角色,并授予访问通信数据库的读、写权限,并对其中的Cell表数据进行修改。
(15)将角色赋予
(1)中定义的用户,建立用户和角色联系。
(16)再次用此用户访问通信数据库,并对其中的Cell表数据进行修改。
实验环境:
WindowsXP,MicrosoftSQLServer2005
实验步骤及结果分析:
(一)、完整性实验与要求:
一、建表阶段
1.利用SQL语句,分别定义数据库中各基本表的主键、候选键、外键,实现实体完整性约束和参照完整性约束。
主键、外键见附录1建表代码
候选键:
altertableMSaddconstraintUQ_UserNameunique(UserName)
2.在数据库中选取两张或三张具有外键关联的表,利用语句foreignkey-references创建外键,实现参照完整性约束。
见附录1建表代码
3.根据实际背景,对某些表中的某些特定属性,定义空值、非空约束。
见附录1建表代码
4.建表时,使用check谓词,通过断言,添加如下一些约束:
(1)1个MSC最多管理10个BSC。
createtriggerBSC_to_MSConBSCforinsert,updateas
ifexists
(selectMSC.MscID
fromMSC,(selectMscID,count(BscId)asBSC_number
fromBSC
groupbyMscID)asMSC_count_BSC
--以MscID为依据分组,然后新建一个表MSC_count_BSC,里面有两个属性,MscID和BSC_number
whereBSC_number>10andMSC.MscID=MSC_count_BSC.MscID
)
begin
print'AMSCcanonlymanageatmost10BSCs.'--出错了,提示
rollbacktransaction
end
(2)1个BSC最多管理50个小区/扇区。
createtriggercell_to_BSConcellforinsert,updateas
ifexists
(selectBSC.BscId
fromBSC,(selectBSC.BscId,count(distinctCellID)ascell_number
fromcell,BSC,BTS
whereBSC.BscId=BTS.BscIdandBTS.BtsName=cell.BtsName
groupbyBSC.BscId)asBSC_count_cell
wherecell_number>50andBSC.BscId=BSC_count_cell.BscId
)
begin
print'ABSCcanonlymanageatmost50cells'
rollbacktransaction
end
(3)1个BTS可以连接至1-3个BSC。
createtriggerBTS_to_BSConBTSforinsert,updateas
ifexists
(
selectBTS.BtsName
fromBTS,(selectBtsName,count(BscId)asBSC_number
fromBTS
groupbyBtsName)asBTS_Count_BSC
whereBTS.BtsName=BTS_Count_BSC.BtsNameandBSC_numbernotbetween1and3
)
begin
print'ABTScanonlyconnecttoatleast1andatmost3BSCs.'
rollbacktransaction
end
(4)1个MS可以位于1到6个BTS的覆盖范围内。
createtriggerMS_to_BTSonMSforinsert,updateas
ifexists
(
selectMS.IMEI
fromMS,(selectIMEI,count(CellID)asBTS_number
fromMS,Cell
groupbyIMEI)asMS_Count_BTS
whereMS.IMEI=MS_Count_BTS.IMEIandMS_Count_BTS.BTS_numbernotbetween1and6
)
begin
print'AnMScanonlybecoveredbyatleast1andatmost6BTSs.'
rollbacktransaction
end
(5)小区/扇区所使用的频点号在[1,124]之间。
altertablepindianaddconstraintCK_freqcheck(Freqbetween1and124)
二、主键/候选键约束验证
1.选取定义了主键的关系表,向该表插入在主属性上取值为空的元组,观察系统反应;
选取表中某些或某个元组,修改这些元组在主属性上的取值,
或插入新元组,使这些元组与表中已有其它元组的主属性取值相同,观察系统反应;
插入主属性为空的元组:
插入重复主键:
2.选取定义了候选键的关系表,向该表插入在候选键属性上取值为空的元组,观察系统反应;选取表中某些或某个元组,修改这些元组在候选键属性上的取值,或插入新元组,使这些元组与表中已有其它元组的候选键属性取值相同,观察系统反应;
插入候选键属性值为空:
插入失败,原因未知。
插入重复候选键:
反正,结论就是:
主键不能为空,且不能重复;候选键可以为空但不能重复。
三、外键约束验证
1.选取相互间定义了外键关联的一组表,分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。
上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。
以BSC为被参照表,BTS为参照表,外键为BscId。
对被参照表操作:
(1)插入:
A.违反约束:
不存在。
B.不违反约束:
(2)删除:
A.
违反约束:
参照表中的外键引用了此值
B.
不违反约束:
参照表中的外键没有引用此值
(3)更新:
A.违反约束:
参照表中的外键引用了此主属性的值,则此主属性不能修改。
B.不违反约束:
被参照表中的外键没有引用此主属性的值(不是主属性的其他属性可以任意修改)
对参照表操作:
(1)插入:
A.违反约束:
被参照表的主键中没有此值
B.不违反约束:
被参照表的主键再有此值
(2)删除:
A.违反约束:
不存在
B.不违反约束:
(3)更新:
A.违反约束:
被参照表的主键中没有此值,则外键不能设为此值。
B.不违反约束:
被参照表的主键中有此值
结论:
被参照表
参照表
违反约束
不违反约束
违反约束
不违反约束
插入
无
全部
主键无此值
主键有此值
删除
外键有此值
外键无此值
无
全部
更新
外键有此值
外键无此值
主键无此值
主键有此值
2.观察级联操作对外键约束的影响
1)对相互间定义了外键关联关系的一组表,分别使用
foreignkey-references
ondeletecascade
onupdatecascade
oninsertcascade
语句创建级联外键约束。
首先删除原先的外键约束:
AltertableBSCdropconstraintFK_bs
为保证其效果,把与BSC相关的外键约束也删除
AltertableBTSdropconstraintFK_bt
然后创建级联外键约束:
2)分别在参照关系、被参照关系上,对表的主属性/外键属性作插入、删除、更新等操作,观察当1个表(如参照关系表、被参照关系表)在外键或主属性属性上的取值发生变化时,数据库管理系统对这些操作的反应,以及另外一个表(如被参照关系表、参照关系表)在主属性或外键属性上的取值的变化,并记录实验结果。
注:
上述插入、删除、更新操作操作分为违反约束和不违反约束两种情况。
对被参照表操作:
(1)插入:
A.违反约束:
不存在。
B.不违反约束:
(2)删除:
A.违反约束:
参照表的外键中引用了此值
不仅删除被参照表中的元组,连同参照表中与之有关的所有元组也删除。
操作前:
执行操作deletefromMSCwhereMscId=5214后:
B.不违反约束:
参照表的外键中没有引用此值
仅删除被参照表中的元组。
(3)更新:
A.违反约束:
参照表的外键中引用了此值
不仅更新被参照表中的主键值,而且更新参照表中所有与之相关的外键值。
执行操作前:
执行操作updateMSCsetMscID=5211whereMscID=5215后:
B.不违反约束:
参照表的外键中没有引用此值,仅更新被参照表中的主键值。
对参照表操作:
(1)插入:
A.违反约束:
被参照表的主键无此值。
B.不违反约束:
被参照表的主键有此值。
(2)删除:
A.违反约束:
不存在。
B.不违反约束:
全部。
但是被参照表相应元组不会被删除。
(3)更新:
A.违反约束:
被参照表主键中没有此值,则外键不能设为此值。
B.不违反约束:
被参照表的主键中有此值。
执行后结果
结论:
对参照表的操作与默认的noaction并无不同;对被参照表的操作,插入操作也没有不同,删除和更新操作,级联外键约束不仅更改被参照表主键,还会更改与之相关联的参照表的外键。
当用户的操作违反约束时,SQL提供了两种可选方案供数据库实现者使用:
RESTRICT(限制策略);CASCADE(级联策略);
<1>限制策略
限制策略是SQL的默认策略,任何违反参照完整性的更新均被系统拒绝。
<2>级联策略
当用户删除或更新外键所指向的键时,SQL提供了另一种方案,即级联策略。
通过在REFERENCES子句后添加ONDELETE和ONUPDATE子句实现:
[ONDELETE{CASCADE|NOACTION}]
[ONUPDATE{CASCADE|NOACTION}]
如果没有指定ONDELETE 或ONUPDATE,则默认为NOACTION。
ONDELETENOACTION
指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚DELETE。
ONUPDATENOACTION
指定如果试图更新某行中的键值,而该行含有由其它表的现有行中的外键所引用的键,则产生错误并回滚UPDATE。
CASCADE允许在表间级联键值的删除或更新操作,这些表的外键关系可追溯到执行修改的表。
不能为任何具有timestamp列的外键和主键指定CASCADE。
ONDELETECASCADE
指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。
如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
ONUPDATECASCADE
指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。
如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。
三、check/触发器约束验证
选取建表阶段定义的2个断言约束,对断所涉及的元组属性做插入、删除、更新操作,观察当违反断言、触发器约束条件时,DBMS的反映和关系表内元组数据的变化(对触发器)。
(1)1个MSC最多管理10个BSC。
插入:
插入之前MscID为5215的MSC已经管理了10个BSC。
元组内数据不变。
删除:
删除操作全部成功。
更新:
操作前
执行操作
前面那个操作如果操作成功则MscID为5215的MSC将管理超过10个BSC,违反约束则操作不能成功。
后面那个操作成功后则不会违反约束,因此操作成功。
(2)小区/扇区所使用的频点号在[1,124]之间。
插入:
频点号不在[1,124]之间,插入失败。
频点号在[1,124]之间,插入成功。
删除:
删除操作全部成功。
更新:
结论:
只要操作后不违反约束就操作就可以进行,如果操作后违反约束则操作不能进行。
(二)、安全性实验内容与要求:
(1)以DBA身份(可以是SQLServer上的sa或者windows上的系统管理组的某个成员)登陆系统,在图形界面下创建新登录,新建登录用户可以使用Windows认证模式和SQLServer认证模式。
以DBA身份登录系统:
在图形界面下创建新登录:
注意要把“强制密码过期”选项的勾去掉,不然会出错。
(此版本不能建立Windows认证模式。
)
(2)
使用T-SQL命令createloginlogin-name…和createloginlogin-namefromwindows重复第1步的内容。
(3)
在服务器角色选项卡中赋予新建用户角色。
完成后查找T-SQL中对应命令,在图形界面上撤消该权限后使用命令完成授予权限和收回权限的任务。
图形化新建用户:
(注意用户在每个数据库里而登录名在数据库之外)
用SQL语句新建用户:
图形化赋予新建用户角色:
如上图点击属性,也可以在新建的时候就勾选‘数据库角色成员身份’的相应选项。
可以在相应角色里面是否有该角色成员查看是否赋予角色成功。
SQL命令为
删除角色的SQL命令为
(4)将新建用户映射到移动通信数据库某用户。
执行相关SQL操作,检查该用户的权限。
用户在权限范围内、超出权限范围访问相应数据对象,查看访问结果和DBMS的反映。
将登录名lm映射到移动通信数据库GSM用户lm:
查看用户lm的权限
用户在权限内访问数据库GSM(退出Windows登录,用lm登录)
但是看不到数据库内部的表,因为只有connect权限,没有访问权限。
用户超出权限范围访问数据库third
(5)
对特定服务器对象设置权限,双击登录名以后选择安全对象,赋予该登录名对服务器内的某个对象的权限。
执行相关S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告