您现在的位置:首页 >> 太原理工大学实验报告 >> 太原理工大学物理实验,太原理工大学实验中心,太原理工大学大物实验,太原理工大学数据库实验报告

太原理工大学物理实验,太原理工大学实验中心,太原理工大学大物实验,太原理工大学数据库实验报告

时间:2012-12-16 来源: 泥巴往事网

本科实验报告课程名称: 数据库系统原理 B实验项目: 交互式 SQL 语句的使用实验地点:专业班级: 学号:学生姓名:指导教师: 201 年 月 日一 目的与要求(1)掌握数据库对...

本科实验报告 课程名称: 数据库系统概论 实验项目:交互式 SQL、数据完整性、用户鉴别与 数据控制 实验地点:

致远楼 B503 专业班级:软件 12 班 学号:20120058 学生姓名: 王者清风 指导教师: 李 雪 梅 2014 年 3 月 18 日 一、实验目的和要求 熟悉通过 SQL 对数据库进行操作。 二、实验内容和原理 1.在 RDBMS 中建立一个学生-课程数据库,进行实验所要求的各种操作,所有的 SQL 操作均在此建立的新库里进行。

2.根据以下要求认真进行实验,记录所有的实验用例及执行结果。

数据定义:基本表的创建、修改及删除;索引的创建和删除。

数据操作:完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询);完成各类更新 操作(插入数据,修改数据,删除数据)。

视图的操作:

视图的定义(创建和删除),查询,更新(注意更新的条件)。 三、主要仪器设备 操作系统:Windows 7。

数据库管理系统:SQL Server2008。 四、操作方法与实验步骤 实验数据记录 实验结果 (一)数据定义:

一.基本表的操作 1.建立基本表 1)创建学生表 Student,由以下属性组成:学号 Sno(char 型,长度为 9, 主码),姓名 Sname(char 型,长度为 20,唯一),性别 Ssex(char 型, 长度为 2),年龄(smallint),所在系(char 型,长度为 20)。

create table Student (Sno char(9) primary key, Sname char(20) unique, Ssex char(2), Sage smallint, Sdept char(20));

2)创建课程表 Course,由以下属性组成:课程号 Cno(char 型,主码, 长度为 4),课程名 Cname(char 型,长度为 40),先行课 Cpno(char 型,长度为 4,外码),学分 Ccredit(smallint)。

create table Course (Cno char(4) primary key, Cname char(40), Cpno char(4), Ccredit smallint);

若设置 Cpno 外码,插入数据时会提示违反外码约束。

3)创建学生选课表 SC, 由以下属性组成:

学号 Sno(char 型, 长度为 9), 课程号 Cno(char 型,长度为 4),成绩 Grade(smallint),其中 Sno 和 Cno 构成主码。 create table sc (Sno char(9), Cno char(4), Grade smallint, primary key(Sno,Cno), foreign key (Sno) references student(Sno), foreign key (Cno) references course(Cno)); 2.修改基本表:

1)向 Student 表增加“入学时间列” ,其数据类型为日期型。

alter table Student add S_entrance date; 2)将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

alter table Student alter column Sage int; 3)增加课程名称必须取唯一值的约束条件。

alter table Course add unique(Cname); 注意:修改表结构后,再次查看表,注意观察变化。 3.删除基本表:

1)在所有的操作结束后删除 Student 表。

drop table Student;

2)在所有的操作结束后删除 Course 表。

drop table Course;

3)在所有的操作结束后删除 SC 表。

drop table SC;

思考:删除表时,不同的删除顺序会有不同结果,为什么??注意错误 提示。 二.索引操作 1.建立索引 1)为学生—课程数据库中的 Student,Course,SC 3 个表建立索引。其 中 Student 表按学号升序建唯一索引, Course 表按课程号升序建唯一 索引,SC 表按学号升序和课程号降序建唯一索引。

create unique index Stusno on Student(Sno);

create unique index Coucno on Course(Cno);

create unique index SCno on SC(Sno ASC,Cno DESC); 2.删除索引 1)删除 Student 表的 Stusname 索引。

drop index student.Stusname; 已建立 已删除 (二)数据操作 一.更新操作 1,插入数据 1)在 Student 表中插入下列数据:

200215121,李勇,男,20,CS 200215122,刘晨,女,19,CS 200215123,王敏。女,18,MA 200215125,张立,男,19,IS insert into student(Sno,Sname,Ssex,Sage,Sdept)values('200215121','李 勇','男',20,'CS');

insert into student(Sno,Sname,Ssex,Sage,Sdept)values('200215122','刘 晨','女',19,'CS');

insert into student(Sno,Sname,Ssex,Sage,Sdept)values('200215123','王 敏','女',18,'MA');

insert into student(Sno,Sname,Ssex,Sage,Sdept)values('200215125','张 立','男',19,'IS') 2)在 Course 表中插入以下数据:

1,数据库,5,4 2,数学,null,2 6,数据处理,null,2 4,操作系统,6,3 7,PASCAL 语言,6,4 5,数据结构,7,4 1,数据库,5,4 3,信息系统,1,4 insert into course(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);

insert into course(Cno,Cname,Ccredit)values('2','数学',2);

insert into course(Cno,Cname,Ccredit)values('6','数据处理',2);

insert into course(Cno,Cname,Cpno,Ccredit)values('4','操作系统','6',3);

insert into course(Cno,Cname,Cpno,Ccredit)values('7','PASCAL 语言','6',4);

insert into course(Cno,Cname,Cpno,Ccredit)values('5','数据结构','7',4);

insert into course(Cno,Cname,Cpno,Ccredit)values('1','数据库','5',4);

insert into course(Cno,Cname,Cpno,Ccredit)values('3','信息系统','1',4); 3) 在 SC 表中插入以下数据:

200215121,1,92 200215121,2,85 200215121,3,88 200215122,2,90 200215122,3,80 insert into sc (Sno,Cno,Grade) values ('200215121','1',92);

insert into sc (Sno,Cno,Grade) values ('200215121','2',85;

insert into sc (Sno,Cno,Grade) values ('200215121','3',88);

insert into sc (Sno,Cno,Grade) values ('200215122','2',90);

insert into sc (Sno,Cno,Grade) values ('200215122','3',80); 4)将一个新学生元祖(学号:200215128;姓名:陈冬;性别:男;所在 系:IS;年龄:18 岁)插入到 Student 表中。

insert into student (Sno,Sname,Ssex,Sdept,Sage) values ('200215128','陈冬','男','IS',18);

(已做) 5)将学生张成民的信息插入到 Student 表中。

insert into student values('200215126','张成民','男',18,'CS');

(已做) 6)插入一条选课记录:(‘200215128’ , ‘1’)。

insert into sc(Sno,Cno) values('200215128','1');

(已做) 7)对每一个系,求学生的平均年龄,并把结果存入数据库。

create table Dept_age (Sdept char(15), Avg_age smallint);

insert into Dept_age (Sdept,Avg_age) select Sdept,avg(Sage)from student group by Sdept; 2.修改数据 1)将学生 200215121 的年龄改为 22 岁。

update student set Sage=22 where Sno='200215121';

2)将所有学生的年龄增加一岁。

update student set Sage=Sage+1;

3)将计算机科学系全体学生的成绩置零。

update sc set Grade=0 where 'CS'=(select Sdept from student where student.Sno=sc.Sno);

3.删除数据 1)删除学号为 200215128 的学生记录。

delete from student where Sno='200215128';

2)删除所有学生的选课记录。

delete from sc;

3)删除计算机科学系所有学生的选课记录。

delete from sc where 'CS'=(select Sdept from student where student.Sno=SC.Sno );

二.查询操作 1.单表查询 2) 查询全体学生的姓名、学号、所在系。 select sno,sname,sdept from Student; 5) 查询全体学生的姓名、出生年份和所在院系,要求用小写字母表示 所有系名。

select sname,2013-sage birth,lower(sdept) sdept from Student; 10)查询年龄在 20-23 岁(包括 20 岁和 23 岁)之间的学生的姓名、系别 和年龄。

select sname,sdept,sage from Student where sage between 20 and 23 12)查询计算机科学系(CS)、数学系(MA)、和信息系(IS)学生的姓名和 性别。

select sname,ssex from Student where Sdept in('cs','ma','is') 15)查询所有姓刘的学生的姓名、学号和性别。

select sname,Sno,ssex from Student where sname like '刘%' 19)查询 DB_Design 课程的课程号和学分。

select Cno,Ccredit from course where Cname like 'DB\_Design'

escape '\'; 23)查询计算机科学系年龄在 20 岁以下的学生姓名。

select sname from student where sdept='cs'

and sage<20 28)计算 1 号课程的学生平均成绩。

select AVG(grade) no1 from sc where Cno='1' 31)求各个课程号及相应的选课人数。

select Cno,COUNT(sno) number from sc group by Cno 2.连接查询 1)查询每个学生及其选修课程的情况。

select Student.*,sc.* from sc,Student where sc.Sno=Student.Sno 2)对上个题用自然连接完成。

select student.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade from sc,Student where sc.Sno=Student.Sno 3)查询每一门课的间接先修课(即先修课的先修课)。

select first.cno,second.cpno from Course first,Course second where first.Cpno=second.Cno 4)查询每个学生及其选修课程的情况,用外连接来完成 select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from student left outer join sc on(student.Sno=sc.Sno); 5)查询选修 2 号课程且成绩在 90 分以上的所有学生。

select student.Sno,Sname from student,sc where student.Sno=sc.Sno and sc.Cno='2'

and sc.Grade>90;

6)查询每个学生的学号、姓名、选修的课程名及成绩。

select student.Sno,Sname,Cname,Grade from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno; 3.嵌套查询 1)查询与“刘晨”在同一个系学习的学生。

select Sno,Sname,Sdept from Student where Sdept in( select Sdept from Student where Sname='刘晨');

2)查询选修了课程名为“信息系统”的学生学号和姓名。

select Sno,Sname from student where Sno in (select Sno from sc where Cno in (select Cno from course where Cname='信息系统'));

3)找出每个学生超过他选修课程平均成绩的课程号。

select cno from sc x where grade >

(select AVG(Grade) from sc y where x.sno=y.sno group by Sno);

4)查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。

select sname,Sage from Student where Sage <= any (select sage from student where Sdept='cs') and Sdept<>'cs';

5)查询其他系中比计算机科学系所有学生年龄小的学生姓名和年龄。

select sname,Sage from Student where Sage <= all (select sage from student where Sdept='cs') and Sdept<>'cs';

6)查询选修了 1 号课程的学生姓名。

select Sname from student where exists (select * from sc where Sno=student.Sno and Cno='1');

7) 查询没有选修 1 号课程的学生姓名。

select Sname from student where not exists (select * from sc where Sno=student.Sno and Cno='1');

8) 查询选修了全部课程的学生姓名。

select Sname from student where not exists (select * from Course where not exists (select * from sc where Sno=student.Sno and Cno=course.Cno));

9) 查询至少选修了学生 200215121 选修的全部课程的学生号码。

select distinct Sno from sc scx where not exists (select * from sc scy where scy.Sno='200215122'

and not exists (select * from sc scz where scz.Sno=scx.Sno and scz.Cno=scx.Cno));

4.集合查询 1)查询计算机科学系的学生及年龄不大于 19 岁的学生。

select * from student where Sdept='CS'

union select * from student where Sage<=19;

2)查询选修了课程 1 或课程 2 的学生。

select Sno from sc where Cno='1'

union select Sno from sc where Cno='2';

3)查询计算机科学系的学生与年龄不大于 19 岁的学生的交集。

select * from student where Sdept='CS'

intersect select * from student where Sage<=19;

4)查询既选修了课程 1 又选修了课程 2 的学生。

select Sno from sc where Cno='1'

intersect select Sno from sc where Cno='2';

5)查询计算机科学系的学生与年龄不大于 19 岁的学生的差集。

select * from student where Sdept='CS'

except select * from student where Sage<=19 三、视图操作 1.建立视图 1)建立信息系学生的视图。

create view IS_Student as select Sno,Sname,Sage from student where Sdept='IS';

2) 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视 图只有信息系的学生。

create view IS_Student as select Sno,Sname,Sage from student where Sdept='IS'

with check option;

3)建立信息系选修了 1 号课程的学生的视图。

create view IS_S1(Sno,Sname,Grade) as select student.Sno,Sname,Grade from student,sc where Sdept='IS'

and student.Sno=sc.Sno and sc.Cno='1'; 4)建立信息系选修了 1 号课程且成绩在 90 分以上的学生的视图。

create view IS_S2(Sno,Sname,Grade) as select Sno,Sname,Grade from IS_S1 where Grade>=90; 5)定义一个反应学生出生年份的视图。

create view BT_S(Sno,Sname,Sbirth) as select Sno,Sname,2004-Sage from student;

6)将学生的学号及他的平均成绩定义为一个视图。

create view S_G(Sno,Gavg) as select Sno,avg(Grade) from sc group by Sno; 7)将 Student 表中所有女生记录定义为一个视图。

create view F_Student(F_sno,name,sex,age,dept) as select * from student where Ssex='女'; 2.删除视图: 1)删除视图 BT_S: 3.查询视图: 1)在信息系学生的视图中找出年龄小于 20 岁的学生。

select Sno,Sage from IS_Student where Sage<=20;

2)查询选修了 1 号课程的信息系学生。

select IS_Student.Sno,Sname from IS_Student,sc where IS_Student.Sno=sc.Sno and sc.Cno='1';

3)在 S_G 视图中查询平均成绩在 80 分以上的学生学号和平均成绩。

select * from S_G where Gavg>=80; 4.更新视图: 1)将信息系学生视图 IS_Student 中学号为 200215125 的学生姓名改为 “刘辰”。

update IS_Student set Sname='刘辰'

where Sno='200215125'; 原视图 2)向信息系学生视图 IS_Student 中插入一个新的学生记录,其中学号 为 200215129,姓名为赵新,年龄为 20 岁。

insert into IS_Student values('200215129','赵新',20,'IS'); 3)删除信息系学生视图 IS_Student 中学号为 200215129 的记录。

delete from IS_Student where Sno='200215129'; 一、实验目的和要求 (1)了解 SQL Serer 数据库系统中数据完整性控制的基本方法 (2)熟练掌握常用 CREATE 或 ALTER 在创建或修改表时设置约束 (3)了解触发器的机制和使用 (4)验证数据库系统数据完整性控制 二、实验内容和原理 结合 ST 数据库中的各个表,设置相关的约束,要求包括主键约束、外键约束、唯一约 束、 检查约束、非空约束等,掌握各约束的定义方法。

设置一个触发器,实现学生选课总学分的完整性控制,了解触发器的工作机制。

设计一些示例数据,验证完整性检查机制。

要求包括如下方面的内容:

3.1 使用 SQL 语句设置约束 使用 CREATE 或 ALTER 语句完成如下的操作,包括:

1. 设置各表的主键约束 2. 设置相关表的外键 3. 设置相关属性的非空约束、默认值约束、唯一约束 4. 设置相关属性的 CHECK 约束 3.2 使用触发器 创建一个触发器,实现如下的完整性约束: 当向 SC 表中插入一行数据时,自动将学分累加到总学分中。

记录修改学分的操作。

3.4 检查约束和触发器 分别向相关表插入若干条记录,检查你设置的完整性约束是否有效:

1. 插入若干条包含正确数据的记录,检查插入情况 2. 分别针对设置的各个约束,插入违反约束的数据,检查操作能否进行 3. 向 SC 表插入若干行数据,检查触发器能否实现其数据一致性功能。 三、主要仪器设备 使用 SQL Server 数据库管理系统提供的 SSMS 和查询编辑器 四、实验内容 实验结果与分析 创建学生选课数据库 TEST ,包括三个基本表,其中 Student 表保存学生基本信息, Course 表保存课程信息,SC 表保存学生选课信息,其结构如下表: CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK( Ssex in ('男','女')), Sage SMALLINT, Sdept CHAR(20), Sclass CHAR(4) NOT NULL, Stotal smallint DEFAULT 0 );

CREATE TABLE Course ( Cno CHAR(4) CONSTRAINT FK_Course PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT ); CREATE TABLE SC ( Sno CHAR(8) FOREIGN KEY (Sno) REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT CONSTRAINT SC_CHECK CHECK(Grade >0 AND Grade<100), PRIMARY KEY (Sno,Cno), CONSTRAINT FK_SC FOREIGN KEY (Cno) REFERENCES Course(Cno) );

插入数据 INSERT INTO student VALUES('20100001','李勇','男',20,'CS','1001',0) INSERT INTO Student VALUES('20100002','刘晨','女',19,'CS','1001',0) INSERT INTO Student VALUES('20100021','王敏','女',18,'MA','1002',0) INSERT INTO Student VALUES('20100031','张立','男',19,'IS','1003',0) INSERT INTO Student VALUES('20100003','刘洋','女',NULL,NULL,'1001',0) INSERT INTO Student VALUES('20100010','赵斌','男',19,'IS','1005',0) INSERT INTO Student VALUES('20100022','张明明','男',19,'CS','1002',0) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('1','数据库系统原理', '5',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('2','高等数学',null,2) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('3','管理信息系统','1',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('4','操作系统原理','6',3) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('5','数据结构','7',4) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('6','数据处理',null,2) INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES('7','C 语言',null,4) INSERT INTO SC VALUES('20100001','1',92) INSERT INTO SC VALUES('20100001','2',85) INSERT INTO SC VALUES('20100001','3',88) INSERT INTO SC VALUES('20100002','1',90) INSERT INTO SC VALUES('20100002','2',80) INSERT INTO SC VALUES('20100003','1',null) INSERT INTO SC VALUES('201000010','3',null) 修改约束 对数据库中已经存在的表,可对其增加约束或修改已存在的约束:

(1)添加约束 ALTER TABLE Course ADD UNIQUE(Cname) ALTER TABLE Course ADD FOREIGN KEY (Cpno) REFERENCES Course(Cno) 掌握如何添加约束 掌握如何声明唯一约束 (2)修改约束 ALTER TABLE SC DROP CONSTRAINT SC_CHECK ALTER TABLE SC ADD CONSTRAINT SC_CHECK CHECK(Grade >=0 AND Grade<=100) 掌握如何修改约束 理解命名约束的优点 二、检查完整性约束 通过修改数据库中的数据检查完整性约束条件的作用。

1.检查主键约束 (1)执行下面的语句修改 Student 表,观察语句能否正确运行,解释为什么? INSERT INTO Student VALUES('20100101','李斌','男',20,'CS','1001',0) INSERT INTO Student VALUES('20100001','李斌','男',20,'CS','1001',0) 消息2627,级别14,状态1,第1 行 违反了 PRIMARY KEY 约束 'PK__Student__DDDF64467F60ED59'

。不能在对象 'dbo.Student'

中插入重复 键。 语句已终止。 (因为 sno 为主键不能有重复,所以无法运行) UPDATE Student SET Sno='20100021'

WHERE Sname = '张立' 消息2627,级别14,状态1,第1 行 违反了 PRIMARY KEY 约束 'PK__Student__DDDF64467F60ED59'

。不能在对象 'dbo.Student'

中插入重复 键。

语句已终止。 (张立要修改的学跟王敏的学号重复了,由于学号是学生表的主键,不可以重复,所以无法 运行) (2)执行下面的语句修改 SC 表,观察语句能否正确运行,解释为什么? INSERT INTO SC VALUES('20100001','1',78) INSERT INTO SC VALUES('20100001',null,78) 2.检查唯一约束 执行下面的语句修改 Course 表,观察语句能否正确运行,解释为什么? INSERT INTO Course VALUES('8','JAVA',7, 3) INSERT INTO Course VALUES('9','数据结构',7, 3) 3.检查默认值、允许空值列 运行如下的语句:

INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100102','张盛','男','1008') 观察插入数据行的数值 SELECT * FROM Student WHere Sno='20100102' 4.检查非空约束 下面的语句包含空值,检查运行结果,解释为什么? INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100103','张盛','男',NULL) INSERT INTO Student(Sno,Sname,Ssex) VALUES('20100104','张盛','男') 5.检查 CHECK 约束 执行下面的语句,解释其运行结果。

INSERT INTO SC VALUES('20100001','4',95) INSERT INTO SC VALUES('20100001','4',102) INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100103','张盛','男','1008') INSERT INTO Student(Sno,Sname,Ssex,Sclass) VALUES('20100104','张盛','','1008') 6.检查外键约束 (1)执行下面的语句检查外键约束的作用 INSERT INTO SC VALUES('20100301','1',95) INSERT INTO SC VALUES('20100001','10',95) UPDATE SC SET Cno = '10'

Where Cno='1'

UPDATE Course SET Cno = '10'

Where Cno='3' (2)执行下面的语句检查对被引用表的约束 Student 表: DELETE Student WHERE Sno='20100021' DELETE Student WHERE Sno='20100001' UPDATE Course SET Cno = '10'

WHERE Cname = '数据库系统原理' 三、触发器的定义及使用 1.定义触发器 (1)定义一个触发器,实现有关学分的完整性约束:当向 SC 表插入一行选课记录时,自 动 将该课程的学分累加到该学生的总学分中。

CREATE TRIGGER tr_INSERT ON SC FOR INSERT AS --声明变量 DECLARE @sno char(8) DECLARE @cridit int DECLARE @cno char(4) --提取插入的数据 SELECT @sno=Sno,@cno=Cno FROM inserted --提取学生的总学分 SELECT @cridit = Ccredit FROM SC join Course ON (SC.Cno = Course.Cno) WHERE SC.Cno = @cno --更新总学分 UPDATE Student SET Stotal = Stotal + @cridit WHERE Sno = @sno GO (2)定义一个触发器,实现对 SC 表的操作登记:当用户向 SC 表插入或修改时,记录该操 作 到数据库中。

创建日志登记表: CREATE TABLE LOG_TABLE ( username char(10), --操作人员 date datetime, --修改时间 Sno char(8) , --学生学号 Cno char(4) --课程号 ) 创建日志登记触发器: CREATE TRIGGER tr_UPDATE ON SC FOR INSERT,UPDATE AS DECLARE @sno char(8) DECLARE @cno char(4) DECLARE @new smallint SELECT @sno=Sno,@cno=Cno FROM inserted INSERT INTO LOG_TABLE VALUES(CURRENT_USER,getdate(),@Sno,@Cno);

GO (3)执行插入操作,触发触发器:

INSERT INTO SC VALUES('20100001','6',95) (4)验证触发器是否触发 select * from student select * from LOG_TABLE 1、实验目的 (1)了解 SQL Serer 数据库系统中数据访问控制的基本方法 (2)了解使用 SSMS 如何给用户授权 (3)熟练掌握常用 GRANT 和 REVOKE 进行权限控制 (4)验证数据库系统的访问控制 2、实验平台 使用 SQL Server 数据库管理系统提供的 SSMS。 3 实验内容及要求 实验应包括如下方面的内容:

创建新的数据库用户 对上一实验建立的表进行权限设置 检查数据库用户的权限 撤销用户权限 4 实验报告 要求写出实验的基本过程。 参考示例:

在 SQL Server 中, 对用户访问数据库的权限管理可以使用两种方式, 一种是使用 SSMS 的图形界面进行管理,一种是使用 SQL 语句。

3.1 使用 SSMS 的图形界面创建用户并授权 创建一个数据库用户:张明,授予他可以查询 Student 表的权限。

1. 使用 SSMS 的图形界面创建登录名 在快捷菜单中选择“新建登录名” : 进入“登录名”窗口,输入登录信息:

张明 12345678 2. 使用 SSMS 的图形界面创建数据库用户 选择“ST”数据库,在快捷菜单中选择“新建登录名” : 3. 使用 SSMS 的图形界面进行授权,设置用户对对象的访问权限 展开 ST 数据库的“安全性”下的“用户” ,选择“张明 db” 。

(1)打开用户属性窗口: 3.2 使用SQL语句创建用户并授权 在 ST 或 TEST 数据库中,使用 SQL 语句创建两个数据库用户,对数据库中的 Student、 SC、和 Course 表,分别对其授予不同的访问权限,如下表。

表 3.1 授予用户权限 1. 创建登录名 用户要访问数据库,必须首先登录到服务器上。因此,首先需要为用户创建登录名。以 系统管理员账户登录,进入数据库服务器,执行以下的操作。

(1)分别创建两个登录名王明和李刚:

CREATE LOGIN 王明 WITH password='123456'

CREATE LOGIN 李刚 WITH password='123456' 2. 创建数据库用户 用户登录服务器后, 要进入某一数据库访问, 需要为登录用户在该数据库中建立一个数 据库用户名。

对创建的两个登录名,在 TEST 数据库分别为其创建两个数据库用户:

(1)切换到 TEST 数据:

USE TEST (2)创建登录名在 TEST 数据库中的用户:

CREATE USER 王明db FOR LOGIN 王明 CREATE USER 李刚 FOR LOGIN 李刚 3. 授权 在数据库中添加新用户后, 新用户没用访问数据库中数据的权限, 需要数据库管理人员 给其授予相关的权限后,才能执行相应的操作。

按照表 3.1,授权如下:

(1)授予王明权限 GRANT SELECT ON Student TO 王明 db (2)授予李刚权限 GRANT SELECT ON Student TO 李刚 GRANT INSERT,UPDATE,DELETE ON Student TO 李刚 GRANT SELECT ON Course TO 李刚 3.3 检查权限控制 分别以两个登录名登录数据库,执行一些对数据库的操作,检查用户否允许执行相关 的 操作。

1. 检查王明的权限 以用户“王明”登录,执行如下的操作,检查能否正确的运行:

SELECT * FROM Student INSERT INTO Student(Sno,Sname,Sclass) VALUES('20101101','高志','1008') UPDATE Student Set Sage = Sage + 1 DELETE FROM Student Where Sno = '20101010' SELECT * FROM Course SELECT * FROM SC 2. 检查李刚的权限 以用户“李刚”登录,执行如下的操作,检查能否正确的运行:

SELECT * FROM Student INSERT INTO Student(Sno,Sname,Sclass) VALUES('20101201','钱红','1008') UPDATE Student Set Sage = Sage + 1 DELETE FROM Student Where Sno = '20101210' SELECT * FROM Course INSERT INTO Course VALUES('20','FORTRAN 语言',NULL,2) UPDATE Course Set Ccredit = 3 WHERE Cno='2' DELETE FROM Course Where Cno = '6' 3. 增加李刚的权限 以用户“李刚”登录,执行如下的操作:

(1) 检查李刚能否对 SC 表执行查询、插入、修改、删除操作。

(2) 使用管理员帐号给李刚授予对 SC 表的查询、插入、修改、删除权限 (3) 再次检查李刚能否对 SC 表执行查询、插入、修改、删除操作。 3.4 撤销权限 当不希望用户执行某些对数据库的操作时,可以撤销先前授予用户的操作权限。

(1)撤销权限 以系统管理员帐号登录,撤销“李刚”对 Student 表的权限:

REVOKE SELECT ON Student FROM 李刚 REVOKE INSERT,UPDATE,DELETE ON Student FROM 李刚 (2)检查权限 以“李刚”帐号登录,检查如下的命令能否正确的运行:

SELECT * FROM Student INSERT INTO Student(Sno,Sname,Sclass) VALUES('20101501','赵光','1008') UPDATE Student Set Sage = Sage + 1 DELETE FROM Student Where Sno = '20101510'

暂无评价 | 0人阅读 | 0次下载 | 举报文档 太原理工大学数据库实验报告_实习总结_总结/汇报_实用文档.

本科实验报告;数据库系统原理sql、数据完整性、用户鉴别与;逸夫楼303****学号:****;安建成;2013年5月18日;一、实验目的和要求;熟悉通过sql对数据库进行操作;二、实...

**** 学号: **** 安建成 2013年5月18 日一、实验目的和要求 熟悉通过 sql 对数据库进行操作. 二、实验内容和原理 1.在rdbms 中建立一... 本站提供 太原理工大学数据库实验报告...

 
  • 泥巴往事网(www.nbwtv.com) © 2014 版权所有 All Rights Reserved.