·41·
(4) 限制每个学生每学期选课门数不能超过6门(设只针对插入操作)。
create trigger tri4 on sc after insert as
if exists(select * from sc join course c on sc.cno = c.cno where sno in (select sno from inserted) group by sno,semester having count(*) > 6 ) rollback 3. 创建满足下述要求的游标,并查看游标的执行结果。 (1) 列出VB考试成绩最高的前2名和最后1名学生的学号、姓名、所在系和VB成绩。
declare @sno char(10),@sname char(10),@dept char(14),@grade char(4) declare c1 SCROLL cursor for select s.sno,sname,sdept,grade
from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'vb' order by grade desc open c1
print ' 学号 姓名 所在系 VB成绩'
print '---------------------------------------' fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade
fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade
fetch last from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0
print @sno + @sname + @dept + @grade close c1 deallocate c1
(2) 列出每个系年龄最大的名学生的姓名和年龄,将结果按年龄降序排序。
declare @sname char(10),@age char(4),@dept char(20) declare c1 cursor for select distinct sdept from student open c1
fetch next from c1 into @dept while @@FETCH_STATUS = 0 begin
print @dept
declare c2 cursor for
select top 2 with ties sname,sage from student where sdept = @dept order by sage desc open c2
41
·42· fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age print '' close c2 deallocate c2
fetch next from c1 into @dept end close c1 deallocate c1
42
·43·
第10章 安全管理
一.选择题
1.下列关于SQL Server数据库用户权限的说法,错误的是 A
A.数据库用户自动具有该数据库中全部用户数据的查询权 B.通常情况下,数据库用户都来源于服务器的登录帐户 C.一个登录帐户可以对应多个数据库中的用户
D.数据库用户都自动具有该数据库中public角色的权限
2.下列关于SQL Server数据库服务器登录帐户的说法,错误的是 B
A.登录帐户的来源可以是Windows用户,也可以是非Windows用户 B.所有的Windows用户都自动是SQL Server的合法帐户
C.在Windows身份验证模式下,不允许非Windows身份的用户登录到SQL Server服务器 D.sa是SQL Server提供的一个具有系统管理员权限的默认登录帐户 3.下列关于SQL Server 2008身份认证模式的说法,正确的是 C
A.只能在安装过程中指定身份认证模式,安装完成之后不能再修改 B.只能在安装完成后指定身份认证模式,安装过程中不能指定
C.在安装过程中可以指定身份认证模式,安装完成之后还可以再对其进行修改 D.身份认证模式是系统规定好的,在安装过程中及安装完成后都不能进行修改 4.下列SQL Server提供的系统角色中,具有数据库服务器上全部操作权限的角色是
A.db_owner B.dbcreator C.db_datawriter D.sysadmin
D
5.下列角色中,具有数据库中全部用户表数据的插入、删除、修改权限且只具有这些权限的角色是 C
A.db_owner B.db_datareader C.db_datawriter D.public 6.创建SQL Server登录帐户的SQL语句是 A A.CREATE LOGIN B.CREATE USER C.ADD LOGIN D.ADD USER 7. 下列SQL语句中,用于收回已授予用户权限的语句是 C A.DROP B.DELETE C.REVOKE D.ALTER 8.在SQL Server中,向数据库角色添加成员的SQL语句是 D A.ADD member B.ADD rolemember C.sp_addmember D.sp_addrolemember 9.下列关于数据库中普通用户的说法,正确的是 A.只能被授予对数据的查询权限
B.只能被授予对数据的插入、修改和删除权限 C.只能被授予对数据的操作权限
43
C
·44· D.不能具有任何权限
10.下列关于用户定义的角色的说法,错误的是 A
A.用户定义角色可以是数据库级别的角色,也可以是服务器级别的角色 B.用户定义的角色只能是数据库级别的角色
C.定义用户定义角色的目的是简化对用户的权限管理 E. 用户角色可以是系统提供角色的成员
二.填空题
1. 数据库中的用户按操作权限的不同,通常分为_____、_____和_____三种。
系统管理员 数据库对象拥有者 普通用户
2. 在SQL Server 2008中,系统提供的具有管理员权限的角色是_____。 sysadmin 3.在SQL Server 2008中,系统提供的默认管理员帐户是_____。 sa
4.SQL Server 的身份验证模式有_____和_____两种。 仅Windows 混合模式 5.SQL Server 的登录帐户来源有_____和_____两种。 Windows 非Windows 6.在SQL Server 2008中,所的数据库用户都自动是_____角色的成员。 public 7.在SQL Server 2008中,系统提供的具有创建数据库权限的服务器角色是_____。 dbcreator 8.在SQL Server 2008中,创建用户定义角色的SQL语句是_____。 CREATE ROLE
9.SQL Server 2008将权限分为_____、_____和_____三种。 对象权限 语句权限 隐含权限 10.在SQL Server 2008中,角色分为种_____和_____两大类。 固定角色 用户角色
44