实验报告单1院(系)计算机学院专业计算机科学与技术班级计科三班姓名刘光宇学号1350340122同组人无实验室S4306组号日期2016.6.07课程数据库SQL指导教师王海军成绩实验项目编号08实验项目名数据库的安全性一、实验目的1.熟悉通过SQL语句对数据进行安全性控制;2.针对具体应用要求,完成授权和收回权限的操作;二、实验环境(仪器设备、软件等)1、机房电脑windowXP2、MicrosoftSQLServer2008三、实验原理(或要求)(1)microsoftsqlsever2008的多安全等级的数据库,借故欧清晰,是以“账号”为核心的一系列授权管理。(2)一般的数据库管理系统将用户分为几类:系统管理员,数据库管理员,数据库对象用户,数据库访问用户;(3)microsoftsqlsever2008常用的备份设备主要包括磁盘和磁带,两者的使用方式基本一样(4)microsoftsqlsever2008提供了多种备份策略,常用的主要有三种:安全备份数据库,增量备份数据库,备份事务日志2四、实验步骤1.在服务器级别上创建三个以SQLServer身份验证的登录名,登录名称自定。CREATELOGINZ_2011013199WITHPASSWORD='2011013199'CREATELOGINZX_2011013199WITHPASSWORD='2011013199'CREATELOGINZXJ_2011013199WITHPASSWORD='2011013199'2.分别为三个登录名在“gongcheng”数据库映射三个数据库用户,数据库用户名为Tom,Mary和John,使这三个登录名可以访问“gongcheng”数据库。USEgongchengGOCREATEUSERTomFORLOGINZ_2011013199--DROPUSERTomUSEgongchengGOCREATEUSERMaryFORLOGINZX_2011013199--DROPUSERMaryUSEgongchengGOCREATEUSERJhonFORLOGINZXJ_2011013199--DROPUSERJhon33.授予用户John创建表和视图的权限。GRANTCREATETABLETOJhonGRANTCREATEVIEWTOJhon连接后:验证代码:GOCREATESCHEMAtest_schemaAUTHORIZATIONJhonGO4.完成以下授权:(1)把对表S的INSERT权力授予用户Tom,并允许他再将此权限授予其他用户。GRANTINSERTONSTOTomWITHGRANTOPTION检验如下:4(2)用户Mary对S,P,J三个表有SELECT和INSERT权力GOGRANTSELECT,INSERTONSTOMaryGRANTSELECT,INSERTONPTOMaryGRANTSELECT,INSERTONJTOMaryGO检验如下:5(3)用户Tom对SPJ表有DELETE权力,对QTY字段具有UPDATE权力。GOGRANTDELETE,update(QTY)ONSPJTOTomGO检验如下:架构的创建:检验代码:USEgongchengUPDATESPJSETQTY=QTY+20006DELETEFROMSPJWHERESno='S3'ORSno='S4'7(4)把对用户Tom授予的所有权力收回GOREVOKEDELETE,update(QTY)ONSPJFROMTomREVOKEINSERTONSFROMTOMGO(5)对用户Mary增加SPJ表的SELECT权力。GOGRANTSELECTONSPJTOMaryGO(6)拒绝Mary对表P的INSERT权限。DENYINSERTONPTOMary5.在student数据库中创建角色STUDBA,将查询和更新SC表的权限授予角色STUDBA。USEStudentCREATEROLESTUDBAGRANTSELECT,UPDATEONSCTOSTUDBA6.两个同学为一组(自由搭配),在自己的数据库服务器上分别为对方创建一个登录名,在student数据库中为登录名映射数据库用户,将数据库用户加入STUDBA角色中。然后用对方为自己创建的登录名和对方的数据库服务器建立连接,对对方的数据库进行操作,验证所授予的权限。CREATELOGINOTH8WITHPASSWORD='123'CREATEuserNIforloginOTHEXECSP_ADDROLEMEMBER'STUDBA','NI'实验截图如下:五、记录与处理(实验数据、误差分析、结果分析)还是没怎么明白为什么当允许用户拥有两个权限时(例如:查询和插入)但是检验时查询时没有问题的,而插入就有问题的(如下图显示的错误)INSERTINTO(Sno)VALUES(S10)但是,当只有插入权限时却是可以的。虽然最后我发现假如是S9就可以的,不知道为什么不能是s9以上的。由于最后我都是在宿舍做的,宿舍连接不上的就没有连接的,最后在机房完成的连接,为了简便起见就没有前面的操作的,只完成了连接。9六、思考题如何给Transact-SQL进行授权?执行以下步骤以使用Transact-SQL进行授权:(1)在SQLServerManagementStudio中,单击工具栏上的【新建查询】按钮。(2)在新的空白查询窗口中,输入以下Transact-SQL代码。USEstuGRANTselectONstudents.studentTOu1(3)单击工具栏上的【执行】按钮,将查询student表的权限授给用户u1。(4)同样在新的空白查询窗口中,输入以下Transact-SQL代码,把表sc的查询权限授予所有用户。USEstuGRANTselectONstudents.scTOpublic(5)同样在新的空白查询窗口中,输入以下Transact-SQL代码,把查询student表和修改学号的权限授予用户u4。USEstuGRANTupdate(sno),selectONstudents.studentTOu4(6)同样在新的空白查询窗口中,输入以下Transact-SQL代码,把表sc的insert权限授予用户u5,并允许将此权限再授予其他用户。USEstuGRANTinsertONstudents.scTOu5WITHGRANTOPTION(7)在给角色授权时,其格式与给用户授权是一样的,只需将用户名改10为角色名即可。如在新的空白查询窗口中,输入以下Transact-SQL代码,可将查询student表的权限授给角色r1。USEstuGRANTselectONstudents.studentTOr1七、实验小结本次实验是讨论数据库的安全性问题,它的核心技术是身份识别,通过用户管理和权限管理实现对数据库的安全管理。本次实验的另外一个重点就是学会数据库的备份和还原,对数据库因软件或硬件损坏情况做好数据库安全保护。此次实验是最后一次实验,所以倍加珍惜,本应该一次性在实验室完成的,但中途有事耽误了点时间,所以又在自己电脑上重新做的,以前做实验都没特别认真地做过,有点心理障碍,但当自己真正认认真真做的时候,会发现其实不难,时间也会过的好快,圆满的结束了最后一次实验,却不会结束与数据库的缘分,以后的日子里,我会继续深究这门学科的。