实验报告课程名称数据库安全内容数据库权限的设计与实现指导教师岳清起止日期2016.10.10-11.1提交日期2016.11.8学院计算机学院系别专业软件工程学生姓名管腾飞班级/学号软工1401/2014011352成绩___________________一、实验目的掌握用户、角色、权限的设置。通过实验,进一步加深数据库用户、用户权限、服务器角色、数据库角色等概念含义。二、实验内容1、建立SQLServer认证的登录帐户:login_a,login_b,login_c,其中login_a的服务器角色为:public;login_b的服务器角色为:public+dbcreator;login_c的服务器角色为:public+sysadmin。实现过程截图2、用login_a登录,能否访问dbsecurity数据库?为什么?答:无法访问。因为在建立login_a登陆账户时,其服务器的角色为public,而在此之前的dbsecurity所在的数据库角色为public+sysadmin。角色不同所拥有的权限也不同。3、用login_a登录,创建数据库login_a_db,是否成功,为什么?答:创建数据库login_a_db失败。login_a登陆账户角色为public没有创建表的权限。4、用login_b登录,能否访问dbsecurity数据库?为什么?答:用login_b登录不能访问dbsecurity数据库。因为在次之前进行角色设定的时候,login_b的角色为public+dbcreator。而在此之前的dbsecurity所在的数据库角色为public+sysadmin。角色不同所拥有的权限也不同。5、用login_b登录,创建数据库login_b_db,是否成功,为什么?答:用login_b登录,可以创建数据库login_b_db6、用login_c登录,能否访问dbsecurity数据库?为什么?答:用login_c登录,可以访问dbsecurity。因为在设定login_c角色时,有这个权限。7、用login_c登录,创建数据库login_c_db,是否成功,为什么?答:用login_c登录,成功创建数据库login_c_db。因为用户角色login_c拥有可以创建数据库的权限。8、将login_a、login_b映射为dbsecurity数据库的用户。login_a的数据库角色为db_datareader;login_b的数据库角色为db_datareade+db_datawriter1:设定将login_a映射为dbsecurity数据库的用户。login_a的数据库角色为db_datareader。2:设定将login_b映射为dbsecurity数据库的用户。login_b的数据库角色为db_datareade+db_datawriter。9、用login_a登录,对dbsecurity数据库的表查询、修改和删除,是否成功,为什么?答:用login_a登录,对dbsecurity数据库的表查询成功,修改失败,删除失败。因为在设定登录名时,对dbsecurity数据库的角色设定为db_datareader就代表login_a只有数据的读取权限,并未拥有更改数据的权限。验证:10、用login_b登录,对dbsecurity数据库的表查询、修改和删除,是否成功,为什么?答:用login_b登录,对dbsecurity数据库的表查询成功,修改成功,以及删除也成功。因为在设定登录名login_b的数据库角色时,设定为db_datareade+db_datawriter说明login_b登录名既拥有数据库的读取,以及数据库的写的权限。11、授予login_a对dbsecurity数据库中表employee的插入、删除和修改的权限。答:授予login_a对dbsecurity数据库中表employee的插入、删除和修改的权限。在login_c用户中进行数据库查询操作,查询语句为:grantdeleteonemployeetologin_agrantupdateonemployeetologin_agrantselectonemployeetologin_a插入的验证:修改的验证:删除的验证12、如果希望login_a不能查看表employee的全部字段,只能查看其中3个字段,如何操作?答:grantselect(emp_id,name,job_id)onemployeetologin_a13、用login_a登录,创建一个表,是否成功?答:用login_a登陆,创建一个表,创建失败。因为login_a的用户权限,没有可以创建表的权限14、如果希望login_a具有创建表的权限,应如何操作?答:用login_c登录名的登录。然后在数据库角色中进行设定login_a的数据库成员身份为:db_owner.15、login_b用户将其创建的数据库login_b_db的某一个表(table1)的浏览权限赋给login_a,请用代码实现授权。答:login_b用户将其创建的数据库login_b_db的某一个表(table1)的浏览权限赋给login_a.用代码来实现授权,先将login_a映射到Student表代码实现:grantselectonstudenttologin_a16、用login_a登录,浏览上一步授权的表。答:截图显示:17、login_b用户将对数据库login_b_db的某一个表(table1)追加删除和更新的权利给用户login_a(在15中只赋予了浏览权限),请用代码实现授权。答:grantdelete,updateonStudenttologin_a18、用login_a登录,更新和删除上一步授权的表。答:19、删除login_a用户对login_b_db数据库中表的所有权限。(用deny语句实现)答:denyalltologin_a20、用login_b登录,在数据库数据库login_b_db中创建一个新的数据库角色myRole,该角色对table1有select和insert权限,将login_a用户添加到myRole中。用login_a登录,浏览table1的内容,是否成功,为什么?答:成功。因为在数据库login_b_db中的新角色myRole有select和insert权限。并且将login_a用户添加进myRole中。因此具有查看table1中的内容。实现过程:21、Revoke和deny有什么区别,请设计一个例子来说明。答:deny拒绝授予主体权限。防止主体通过其组或角色成员身份继承权限revoke取消以前授予或拒绝了的权限.对login_a进行测试。首先login_a拥有对dbsecurity进行查询的权限,然后进行收回。语句实现:revokeselecttologin_a。执行结果。denyselecttologin_a执行结果三、实验总结本次实验,对数据库的不同用户的权限不同,以及授予不同登陆名不同的权限。在数据库中,为便于用户及权限进行管理,可以将一组具有相同权限的用户组织在一起,这一组具有相同权限的用户就称为角色。通过查阅资料对于数据库的角色做得总结如下:db_owner在数据库中有全部权限。db_accessadmin可以添加或删除用户ID。db_securityadmin可以管理全部权限、对象所有权、角色和角色成员资格。db_ddladmin可以发出ALLDDL,但不能发出GRANT、REVOKE或DENY语句。db_backupoperator可以发出DBCC、CHECKPOINT和BACKUP语句。db_datareader可以选择数据库内任何用户表中的所有数据。db_datawriter可以更改数据库内任何用户表中的所有数据。db_denydatareader不能选择数据库内任何用户表中的任何数据。db_denydatawriter不能更改数据库内任何用户表中的任何数据。在本次实验中,练习了权限的赋予和回收,即grant和revoke。对于权限的禁止,还有deny对于deny和revoke的区别有:revoke不会让用户阻止继承来自角色的权限。Deny会让用户阻止继承来自于角色权限。Deny的权限优先。Deny不能针对与SYSADMIN.