一.实验目的

(1)理解索引的概念与类型。
(2)掌握使用SQL Server Management Studio创建与维护索引的方法。
(3)掌握T-SQL语句创建与维护索引的方法。
(4)掌握SQL Server下的数据库安全管理机制。

二. 实验内容

请分别通过SQL Server Management Studio和T-SQL语句完成该实验。

  1. 索引
    (1)为Student表创建一个以Sno为索引关键字的唯一聚簇索引,索引名为sno_index。若索引已存在,请先删除。
    查看索引是否存在:


    不存在,创建索引

    使用T-SQL语句创建索引
if exists(select * from sysindexes where name='sno_index')
	drop index Student.sno_index
go
create unique clustered
index sno_index on Student(Sno)
go

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver


则先删除现有的聚集索引:

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver_02

(2)为Student表创建以sname、sex为索引关键字的非聚簇索引,对Sname以升序排列,Sex以降序排列,索引名为ss_index。

按住CTRL键同时选中Sname,Sex两列,在"列"一栏中分别选择升序和降序

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver_03


在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver_04


T-SQL语句

create nonclustered
index ss_index on Student(Sname asc,Sex desc);

(3)将索引ss_index删除。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_05


T-SQL语句

drop index Student.ss_index

(4)针对下列4条select语句,在查询分析器中查看这些语句的预执行计划,分析预执行计划的不同点及原因。

a.Select * from student。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_SQL_06

b.Select * from student where sno=‘20110001’。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_07

c.Select * from student where sname like ‘张%’ and sex=‘女’。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver_08

d.Select * from student where Classno=‘051’。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_09

执行的结果不同,原因是where子句的条件不同

  1. 数据库安全
    (1)注册一个“登录”(loginin),登录名为自己的学号,并将该登录加入服务器角色“system administrators”。
    新建登录名:

    在"登录名"处填写学号,然后选择"SQL Server身份验证",输入密码

    然后在"角色服务器"中选择"sysadmin",最后单击"确定"退出

    T-SQL语句:
create login x2002252007
with password='2002252007';

sp_addsrvrolemember x2002252007,sysadmin;

(2)注册一个“登录”(loginin),登录名为自己的姓名,该登录不属于任何服务器角色。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_10


T-SQL语句:

create login liliana
with password='123456'

(3)在数据库Student_info下创建一个用户,用户名为自己的学号,并将它和登录名为自己的学号的登录连在一起,察看该用户属于哪个数据库角色,对数据库对象有哪些操作权限。

在数据库student_info的"安全性"下,右键单击,选择"新建用户"

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_11


填写用户名和登录名,点击确定后退出

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_数据库_12


观察该用户:双击打开"x2002252007"用户,点击"用户映射"即可查看该用户属于哪个数据库角色,对哪些数据库有操作权限

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_Server_13


T-SQL语句实现:

use student_info
go
create user x2002252007
from login x2002252007

(4)在数据库Student_info下创建一个用户,用户名为自己的姓名,并将它和登录名为自己的姓名的登录连在一起,查看该用户属于哪个数据库角色;编辑修改该用户属性,并为该用户分配数据库中各对象的操作权限:
用户创建与上一步创建一样,这里就不再显示
a.对Student表拥有全部权限。

grant insert,update,delete on Student
to liliana;

b.对Course只有select 权限。

grant select on Course
to liliana

c.对SC表的Sno、Cno列具有select权限,对grade列没有任何权限。

grant select on SC(Sno,Cno)
to liliana

(5)创建一个自定义角色“学生”,并将以自己姓名命名的用户添加为其成员。

create role student;
sp_addrolemember student, liliana

(6)断开原来的链接,用学号重新登录,进入Student_info数据库,测试用学号登录后,是否拥有对数据库的全部操作权限(注意:该登录属于system administrators组)。

在s表的sname列上建立一个唯一性索引sname_index 为student表的sname列创建索引_sqlserver_14

(7)断开原来的链接,用姓名登录,进入学生成绩数据库,测试用姓名登录后,拥有对数据库的哪些操作权限。