数据库系统开发实验报告实验一:安全SQLServer安全管理实验学院:计算机学院班级:07111306姓名:虞姝颖学号:11201317621.1.实验一:安全SQLServer安全管理实验通过本实验,掌握SQLServer安全管理中的登录、数据库服务器角色、用户、数据库角色、特定对象权限等基本概念与安全机制,掌握数据库服务器角色授权、数据库角色授权和特定对象授权的方法与各种方法的差异。1.1.1.内容使用管理员登录连接到数据库服务器创建一个SQLServer登录并使用它完成如下的操作:创建一个数据库,在数据库中创建一个表,创建表可以使用如下的命令。具体的实验内容:(1)创建一个登录并将创建的数据库设置为该登录的默认数据库。(2)设置登录在默认数据库中的用户映射。(3)尝试将登录加入到两个不同的数据库服务器角色中对默认数据库进行操作(如创建表Score,查询表StudentInfo等)。注意每次只使用一个数据库服务器角色来验证授权。(4)尝试使用两个不同的数据库角色进行相应的授权操作。(5)只使用特定对象授权,完成相应的操作以验证授权的成功和没有授权时发生的错误。1.1.2.实验要求实验报告中要求给出实验内容中(1)—(5)的每一个的描述。其中,(1)使用T-SQL命令而非图形界面描述具体的操作过程。(2)内容(3)要求使用不同的服务器角色进行实验,要求至少使用2个以上的服务器角色进行测试,简单描述如何将登录加入到服务器角色的操作过程,给出加入不同服务器角色的测试方法与测试结果。注意,加入服务器角色是分别加入,是即加入一个服务器角色进行测试后,将其从服务器角色中删除然后再加入另一个服务器角色。验证授权前后及不同服务器角色授权之间的差异(3)内容(4)与内容(3)类似,只是所使用的是数据库角色而不是服务器角色。(4)内容(5)要求选择一个或多个具体的数据库对象(如表)设置查询、更新或CREATETABLEStudentInfo(idchar(10)primarykey,namevarchar(10)notnull);插入的权限进行相应的测试。其中,有一部分内容必须是仅能够对部分列具有操作权限而对其它列没有操作权限。对于有操作权限与没有操作权限的都要进行相应的测试,给出测试的方法、结果与结果分析。要求结合在数据库原理中所学习的SQL语言的知识使用命令完成而不是使用图形界面。每个小的实验都必须给出具体的实验方法、实验结果与结果分析。在对每个实验结果的分析中要描述产生正确结果或错误的原因,有些可以写出相应的解决方法。例如,操作了对某个表的查询是因为登录XXX在数据库YYY中映射到用户UUU,而用户又属于数据库角色DB_ROLEX,数据库的角色DB_ROLEX具有对数据库的…操作权限,所以能够查询该表。对于不能完成的操作也必须做出相应的分析。1.1.3.实验步骤(1)创建一个登录并将创建的数据库设置为该登录的默认数据库。①打开MicrosoftSQLServerManagementStudio软件,登陆cay。②新建查询,创建数据库xi。③在数据库xi中,创建一个表StudentInfo。④创建一个登录L2并将数据库xi设置为该登录的默认数据库。实验结果:创建数据库xi成功,创建登录L2成功,其默认数据库为xi。结果分析:T-SQL语句没有错,所以成功了。(2)设置登录在默认数据库中的用户映射。①从登录L2创建用户映射STU_USER。实验结果:创建用户映射成功。结果分析:T-SQL语句依然没有错,所以成功了。(3)尝试将登录加入到两个不同的数据库服务器角色中对默认数据库进行操作(如创建表Score,查询表StudentInfo等)。注意每次只使用一个数据库服务器角色来验证授权。①将登录L2加入到数据库服务器角色sysadmin中。②执行创建表SCORE1操作。③执行查询表StudentInfo操作。④将用户L2从服务器角色sysadmin中删除。⑤将登录L2加入到数据库服务器角色serveradmin中。⑥执行查询表StudentInfo。⑦执行创建表Score2。实验结果:将用户L2加入角色sysadmin时,进行查询表StudentInfo,创建表SCORE1操作成功,将用户加入角色serveradmin时,进行查询表StudentInfo,创建表Score2操作失败,权限被拒绝。结果分析:操作了对StudentInfo表的查询、创建SCORE1表,是因为登录L2属于服务器角色sysadmin,而服务器角色sysadmin拥有能够执行SQLServer上的任何操作的权限,所以能够查询StudentInfo、创建SCORE1。而将用户从角色sysadmin中删除并加入角色serveradmin后,操作查询表StudentInfo、创建Score2失败,是因为登录L2属于服务器角色serveradmin,而服务器角色serveradmin只拥有配置服务器设置权限,并没有查询表、创建表的权限。(4)尝试使用两个不同的数据库角色进行相应的授权操作。①将用户STU_USER加入到数据库角色db_owner中。②执行创建表Scorenew操作。③执行查询表StudentIInfo操作。④从角色db_owner中删除用户STU_USER。⑤将用户STU_USER添加到数据库角色db_datareader中。⑥执行创建表Scorenew2操作。⑦执行查询表StudentInfo操作。实验结果:将用户STU_USER加入数据库角色db_owner时,进行查询表,创建表操作成功,将用户STU_USER加入数据库角色db_datareader时,进行查询表操作成功,创建表操作失败,权限被拒绝。结果分析:操作了对StudentInfo表的查询、创建Scorenew表是因为登录L2在数据库xi中映射到用户STU_USER,而用户STU_USER又属于数据库角色db_owner,数据库的角色db_owner拥有了对数据库的查询、修改、删除、新增数据表,执行大部分存储过程的操作权限,所以能够查询StudentInfo、创建Scorenew。而第二次实验操作了对StudentInfo表的查询,是因为用户STU_USER属于数据库角色db_datareader,而数据库角色db_datareader只拥有对数据库的查询权限,所以能够查询该表。数据库角色db_datareader并不拥有新增数据表的操作权限,所以创建Scorenew2失败。(5)只使用特定对象授权,完成相应的操作以验证授权的成功和没有授权时发生的错误。①删除用户L2的服务器角色和数据库角色。②向数据库xi中的表StudentInfo中插入学生信息。③登录用户L2,对表StudentInfo进行查询、更新、插入操作。④对用户STU_USER进行授权操作。⑤登录用户L2,再次执行步骤③中操作。⑥对表StudentInfo进行UPDATE操作,更新id。实验结果:对用户STU_USER授权前进行SELECT、UPDATE、INSERT操作均失败,授权后SELECT、INSERT操作成功,UPDATE列name成功,UPDATE列id失败。结果分析:在用GRANT对用户STU_USER授权前,用户并不具有对该表的各种操作权限,所以操作失败。而用GRANT对用户STU_USER授权对表StudentInfo的SELECT、UPDATE列name、INSERT权限后,用户可以查询该表、向该表中插入新的数据项、更新列name,而不能更新列id。所以操作了SELECT、INSERT、UPDATEname,而操作UPDATEid失败。小结:通过实验一,熟悉了SQLserver2008软件的操作环境和方法。因为初次使用SQLserver,所以实验过程并不顺利,多次出现实验结果不符合预期的情况(比如使用服务器角色serveradmin时仍然能进行查询创建等操作,原因是忘了先将用户从sysadmin角色中删除),然后找到错误,并加以改正,重新实验。同时也对T-SQL语句的实际使用有了更深的认识。