【实验目的】
1.了解SQL Server 的认证模式,安全管理的主要内容和方法。
2.掌握用户管理、访问权限管理的基本方法。
【实验环境】
Windows 10系统 + SQL Server 2012
【实验内容】
1.用SSMS工具建立SQL Server身份验证模式的登录名:log1、log2、log3。
2.利用EDUC数据库以及student、course、student_course表,用log1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能看到并选中EDUC数据库?为什么?
3.将log1、log2和log3映射为EDUC数据库中的用户,用户名同登录名。
4.再次用log1建立一个新的数据库引擎查询,这次在“可用数据库”下拉列表框中是否能看到并选中EDUC数据库?为什么?
5.用log1用户在EDUC数据库中执行下述语句,能否成功?为什么?
select * from course
6.授予log2具有对course表查询权限,授予log3具有对course表的插入权限。
7.在SSMS中,用log3建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?
insert into course(cno,spno,cname) values(‘C02003’, ‘sp02’, ‘软件工程’),再执行下述语句,能否成功?为什么?
select * from course
8.在SSMS中,在log2建立的数据库引擎查询中,再次执行下述语句:
select * from course ,这次能否成功?
但如果执行下述语句:
insert into course values(’c02004’,’sp01’,’计算机图形学’,null,null, null,null,null,null),能否成功?为什么?
9.授予log3在EDUC数据库中具有建表权限。
10.在EDUC数据库中建立用户定义的角色:selectrole,并授予该角色对student、course、student_course表具有查询权。
11.新建立一个SQL Server 身份验证模式的登录名:pub_user,并让该登录名成为EDUC数据库中的合法用户。
12.在SSMS中,用EDUC建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?
select * from course
13.将pub_user用户添加selectrole角色中。
14.在pub_user 建立的数据库引擎查询中,再次执行下述语句,能否成功?为什么?
select * from course
【实验方法和步骤】
1.在开始菜单中选中SQL Server Management Studio图标,启动SSMS。启动后,单击“连接”按钮,进入SSMS窗口。如下图所示:
图1
2.用SSMS工具建立SQL Server身份验证模式的登录名:log1、log2、log3。展开“安全性”结点,右击“登录名”,选择新建登录名。具体操作如下图所示:
图2
3.利用EDUC数据库以及student、course、student_course表,用log1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能看到并选中EDUC数据库?为什么?
可以看到EDUC数据库,但不可选中。因为log1仅是SQL server合法的登录用户,不是EDUC数据库的合法用户。
图3
4.将log1、log2和log3映射为EDUC数据库中的用户,用户名同登录名。
依次展开EDUC数据库、安全性结点,右击“用户”,选择“新建用户”。
具体操作图下图所示:
图5
5.再次用log1建立一个新的数据库引擎查询,这次在“可用数据库”下拉列表框中是否能看到并选中EDUC数据库?为什么?
刷新刚连接的服务器节点,可以选中EDUC数据库。因为当前登录名log1已成为EDUC数据库的合法用户。
6.用log1用户在EDUC数据库中执行下述语句,能否成功?为什么?
select * from course
不能成功,因为log1用户没有被授予查询权限。
结果如下图所示:
图6
7.授予log2具有对course表的查询权限,授予log3具有对course表的插入权限。
右击log2属性,依次点击搜索—特定对象—对象类型—表,点击“确定”。然后选择“浏览”,选中course表,单击确定,返回页面后,授予相应的权限,最后点击“确定”即可。
结果如下图所示:
图7
8.在SSMS中,用log3建立一个新的数据库引擎查询,执行下述语句,能否成功?
insert into course(cno,spno,cname) values(‘C02003’, ‘sp02’, ‘软件工程’),再执行下述语句,能否成功?
select * from course
执行上述插入语句可以成功,因为log3被授予了插入权限。
执行查询语句不能成功,因为log3没有被授予查询权限。
结果如下图所示:
图9
图10
9.在SSMS中,在log2建立的数据库引擎查询中,再次执行下述语句:
select * from course ,这次能否成功?
但如果执行下述语句:
insert into course values(‘c02004’,’sp01’,’计算机图形学’,null,null, null,null,null,null),能否成功?为什么?
执行上述查询语句可以成功。
执行上述插入语句不能成功,因为log2没有被授予插入权限。
结果如下图所示:
图11
图12
10.授予log3在EDUC数据库中具有建表权限。
右击log3属性,选择“安全对象”,依次点击搜索—特定对象—对象类型—数据库—EDUC—确定,返回页面后,勾选“创建表”,最后点击确定即可。
结果如下图所示:
图13
11.在EDUC数据库中建立用户定义的角色:selectrole,并授予该角色对student、course、student_course表具有查询权。
展开“角色”结点,右击“数据库角色”,选择“新建数据库角色”,输入角色名称selectrole。选择“安全对象”,依次点击搜索—特定对象—对象类型—表—浏览,将student、course、student_course表选中,点击确定。返回页面后,为每张表勾选“选择”,完成后点击确定即可。
具体操作如下图所示:
图14
12.新建立一个SQL Server 身份验证模式的登录名:pub_user,并让该登录名成为EDUC数据库中的合法用户。
上述操作中,已详细阐述如何建立新的登录名并让其成为EDUC数据库合法用户,此处不再赘述。
结果如下图所示:
图15
图16
13.在SSMS中,用pub_user 建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?
select * from course
不能成功,没有授予数据库用户pub_user查询权限。
结果如下图所示:
图17
14.将pub_user用户添加selectrole角色中。
展开“数据库角色”结点,右击selectrole属性,依次点击添加—浏览,选择pub_user点击确定即可。
图18
图19
15.在pub_user 建立的数据库引擎查询中,再次执行下述语句,能否成功?为什么?
select * from course
执行上述语句,可以成功。因为pub_user继承了selectrole的权限。
结果如下图所示:
图20
【实验结果】
本次实验结果已在【实验方法与步骤】中详细写明,此处不再赘述。
【总结】
①SQL Server身份验证模式:Windows验证、混合验证模式
②角色分类:服务器角色、数据库角色(固定的数据库角色、用户自定义角色)、应用程序角色
③权限种类:对象权限、语句权限、隐含权限
④管理权限:授予权限、收回权限、拒绝权限