MSServer SQL 2008实验综合(数据对象定义、SQL查询、视图,还在汇总…)

目录

实验一、数据对象的定义         

实验二:数据查询(一)

实验三:数据查询(二)、数据更新数据库

实验四、视图创建与使用


实验一、数据对象的定义

实验内容及步骤:

一、用SQL 定义语句创建符合如下条件的数据库
数据库名为:学生数据库,模式:默认模式
数据文件的物理文件名为:主数据文件 Students_data.mdf(逻辑文件同名),日志文件:Students_log.ldf(逻辑文件同名),存放在D:\Data 文件夹下(若D:盘中无此文件夹,请先建立此文件夹,然后再创建数据库。)这边我放在E盘上了。

create database "学生数据库"
on primary
(
name=Students_data,
filename='E:\Data\Students_data.mdf',
size=10MB,
filegrowth=10%,
maxsize=UNLIMITED
)
log on
(
name=Students_log,
filename='E:\Data\Students_log.ldf',
maxsize=10MB,
filegrowth=1MB
)

二、选用已建立的“学生数据库”,用 SQL 定义语句创建符合如下条件的表 C-1 到 C-4(注意各种完整性约束)
上述两题,界面方式或命令方式均需要熟练掌握(界面方式很简单,我只操作命令形式的哈)

表C-1 Student表结构

列名

说明

数据类型

约束

Sno

学号

普通编码定长字符串,长度为7

主键

Sname

姓名

普通编码定长字符串,长度为10

 

Ssex

性别

普通编码定长字符串,长度为2

 

Sage

年龄

微整型(tinyint)

 

Sdept

所在系

普通编码不定长字符串,长度为20

 

Sid

身份证号

普通编码定长字符串,长度为10

 

Sdate

入学日期

日期

 

 表C-2 Course表结构

列名

说明

数据类型

约束

Cno

课程号

普通编码定长字符串,长度为10

主键

Cname

课程名

普通编码不定长字符串,长度为20

 

Credit

学分

整型

 

Semester

学期

小整型

 

表C-3 SC表结构

列名

说明

数据类型

约束

Sno

学号

普通编码定长字符串,长度为7

主键,引用Student的外键

Cno

课程号

普通编码定长字符串,长度为10

主键,引用Course的外键

Grade

成绩

小整型

 

表C-4 Teacher表结构

列名

说明

数据类型

约束

Tno

教师号

普通编码定长字符串,长度为8

 

Tname

教师名

普通编码定长字符串,长度为10

 

Salary

工资

定点小数,小数点前4位,小数点后2位

 

use 学生数据库
create table Student(
Sno char(7) primary key,
Sname char(10),
Sex char(2),
Sage tinyint,
Sdept varchar(20),
Sid char(10),
Sdate date);

create table Course(
Cno char(10) primary key,
Cname varchar(20),
Credit int,
Semester smallint
);

create table SC(
Sno char(7),
Cno char(10),
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno) references Student(Sno),
foreign key(Cno) references Course(Cno)
);

create table Teacher(
Tno char(8) not null,
Tname char(10),
Salary float(2)
);

 

三、写出实现如下功能的SQL语句,并执行所写代码,查看执行结果。

(1) 在Teacher表中添加一个职称列,列名为:Title,类型为nchar(4)。

alter table Teacher add Title nchar(4);

(2) 将Course表中Credit列的类型改为:tinyint。

alter table Course alter column Credit  tinyint;

(3) 删除Student表中的Sid和Sdate列。

alter table Student drop column Sid,Sdate;

(4) 为Teacher表添加主键约束,其主键为:Tno。

alter table Teacher add primary key(Tno);

 

四、按照要求录入数据

录入数据时请务必保证数据格式与定义的数据类型一致,否则会报错(还是通过SQL语句哈,其实图形操作也方便)。

学号

姓名

性别

年龄

系别

身份证号

入学日期

0811101

李勇

21

计算机系

 

 

0811102

刘晨

20

计算机系

 

 

0811103

王敏

20

计算机系

 

 

0811104

张小红

19

计算机系

 

 

0821101

张立

20

信息管理系

 

 

0821102

吴宾

19

信息管理系

 

 

0821103

张海

20

信息管理系

 

 

0831101

钱小平

21

通信工程系

 

 

0831102

王大力

20

通信工程系

 

 

0831103

张姗姗

19

通信工程系

 

 

表C-2 Course表中的记录

Cno

Cname

Credit

Semester

C001

高等数学

4

1

C002

大学英语

3

1

C003

大学英语

3

2

C004

计算机文化学

2

2

C005

VB

2

3

C006

数据库基础

4

5

C007

数据结构

4

4

C008

计算机网络

4

4

表C-3 SC表中的记录

Sno

Cno

Grade

0811101

C001

96

0811101

C002

80

0811101

C003

84

0811101

C005

62

0811102

C001

92

0811102

C002

90

0811102

C004

84

0821102

C001

76

0821102

C004

86

0821102

C005

73

0821102

C007

NULL

0821103

C001

50

0821103

C004

80

0831101

C001

50

0831101

C004

80

0831102

C007

NULL

0831103

C004

78

0831103

C005

65

0831103

C007

NULL

表C-4 Teacher表中的记录

Tno

Tname

Salary

T001

张美霞

5000

T002

王洪林

5500

T003

李丽芬

4800

T004

周良水

6000

T005

吴翔

700

 在SQLServer中,当设计(修改)表结构之后,再用SQL语句时,列名会显示无效,但执行可以通过。原因是SQL Server的intellisense(智能感知功能)需要重新整理一下,用快捷键Ctrl+Shift+R即可。插入数据后出现“行受到影响”属于正常情况,不用担心。

INSERT INTO Student (Sno,Sname,Sex,Sage,Sdept) VALUES
('0811101','李勇','男',21,'计算机系'),
('0811102','刘晨','男',20,'计算机系'),
('0811103','王敏','女',20,'计算机系'),
('0811104','张小红','女',19,'计算机系'),
('0821101','张立','男',20,'信息管理系'),
('0821102','吴宾','女',19,'信息管理系'),
('0821103','张海','男',20,'信息管理系'),
('0831101','钱小平','男',21,'信息管理系'),
('0831102','王大力','女',20,'计算机系'),
('0831103','张姗姗','男',19,'计算机系');

INSERT INTO Course(Cno,Cname,Credit,Semester) VALUES
('C001','高等数学',4,1),
('C002','大学英语',3,1),
('C003','大学英语',3,2),
('C004','计算机文化学',2,2),
('C005','VB',2,3),
('C006','数据库基础',4,5),
('C007','数据结构',4,4),
('C008','计算机网络',4,4);

INSERT INTO SC(Sno,Cno,Grade) VALUES
('0811101','C001',96),
('0811101','C002',80),
('0811101','C003',84),
('0811101','C005',62), 
('0811102','C001',92), 
('0811102','C002',90),
('0811102','C004',84), 
('0821102','C001',76),
('0821102','C004',86), 
('0821102','C005',73), 
('0821102','C007',NULL), 
('0821103','C001',50), 
('0821103','C004',80), 
('0831101','C001',50), 
('0831101','C004',80), 
('0831102','C007',NULL), 
('0831103','C004',78),
('0831103','C005',65),
('0831103','C007',NULL); 

INSERT INTO Teacher(Tno,Tname,Salary) VALUES 
('T001','张美霞',5000), 
('T002','王洪林',5500),
('T003','李丽芬',4800), 
('T004','周良水',6000),
('T005','吴翔',7000);

         

实验二:数据查询(一)

一、实验目的

掌握SQL程序设计基本规范,熟练运用SQL语言实现数据基本查询,包括单表查询、分组统计查询和连接查询等。

 

二、实验内容和要求

1.  查询SC表中的全部数据。

select * from SC;

2.  查询计算机系学生的姓名和年龄。

select Sname,Sage from Student  where Sdept='计算机系';

3.  查询成绩在70~80分的学生的学号、课程号和成绩。

select Sno,Cno,Grade from SC where Grade between 70 and 80;

4.  查询计算机系年龄在18~20岁的男生姓名和年龄。

select Sname,Sage from Student where Sdept='计算机系' and Sex='' and Sage between 18 and 20;

5.  查询C001课程的最高分。

select MAX(Grade) from SC where Cno ='C001';

6.  查询计算机系学生的最大年龄和最小年龄。

select MAX(Sage) as max_age,MIN(Sage) as min_age from Student where Sdept='计算机系';

7.  统计每个系的学生人数。

select  Sdept,COUNT(*) '总人数'  from Student group by Sdept;

8.  统计每门课程的选课人数和最高成绩。

select Cno ,COUNT(*) ,MAX(Grade) from SC group by Cno;

9.  统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。

select COUNT(Cno),SUM(Grade) from SC group by Sno order by 1 ;

10.  列出总成绩超过200的学生的学号和总成绩。

select Sno,sum(Grade) from SC  group by Sno having SUM(Grade)>200;

11.  查询选了C002课程的学生姓名和所在系。

select Student.Sname,Sdept from Student,SC where SC.Cno='C002';

12.  查询考试成绩80分以上的学生姓名、课程号和成绩,并按成绩降序排列结果。

select Student.Sname,SC.Cno,SC.Grade from Student,SC where Grade>80 order by Grade desc;

13.  查询与VB在同一学期开设的课程的课程名和开课学期。

select Cname,Semester from Course where Semester=(select Semester from Course where Cname ='VB') and Cname != 'VB' ;

 

14.  查询与李勇年龄相同的学生的姓名、所在系和年龄。

select Sname,Sdept,Sage from Student where Sage =(select Sage from Student where Sname ='李勇' )and Sname !='李勇';

15.  查询哪些课程没有学生选修,列出课程号和课程名。

select  Course.Cno,Course.Cname  from  Course LEFT JOIN SC  on SC.Cno=Course.Cno  where  SC.Cno  IS  NULL

16.  查询每个学生的选课情况,包括未选课的学生,列出学生的学号、姓名、选的课程号。

select  Student.Sno,Student.Sname,Cno  from  Student LEFT JOIN SC  on SC.Sno=Student.Sno

 

17.  查询计算机系哪些学生没有选课,列出学生姓名。

select Sname from Student where Sdept='计算机系' and Sno not in (select SC.Sno from SC);

18.  查询计算机系年龄最大的三个学生的姓名和年龄。top 3

select top 3 Sname,Sage from Student where Sdept='计算机系' order by Sage desc;

19.  列出“VB”课程考试成绩前三名的学生的学号、姓名、所在系和VB成绩。top3

select top 3 Student.Sno,Sname,Sdept,Grade from Student,SC,Course where Cname='VB' order by Grade desc;

20.  查询选课门数最多的前2位学生,列出学号和选课门数。 top 2

select top 2 Sno,COUNT(Cno)'选课门数'  from SC group by Sno order by 2 desc;

 

实验三:数据查询(二)、数据更新数据库

1.掌握SQL嵌套查询和集合查询等各种高级查询的设计方法。

2.熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作。

1.  用子查询实现如下查询:

(1)查询选了“C001”课程的学生姓名和所在系。

SELECT   Sname,Sdept   FROM  Student   WHERE Sno IN  (SELECT  Sno   FROM SC WHERE Cno='C001')

(2)查询通信工程系成绩80分以上的学生的学号和姓名。

select Sno,Sname from Student where Sdept='通信工程系' and Sno in(select Sno from SC where Grade>=80);

(3)查询计算机系考试成绩最高的学生的姓名。

select Sname from Student,SC where Student.Sno=SC.Sno and Sdept='计算机系' and Grade in (select MAX(Grade) from SC,student where SC.Sno=Student.Sno and Sdept='计算机系');

(4)查询年龄最大的男生的姓名、所在系和年龄。

select Sname,Sdept,Sage from Student where sex='' and Sage >=(select MAX(Sage) from Student where Sex='');

 

2.  查询C001课程的考试成绩高于该课程平均成绩的学生的学号和成绩。

select Sno,Grade from SC where Cno='C001' and Grade>(select AVG(Grade) from SC where Cno='C003');

3.  查询计算机系学生考试成绩高于计算机系学生平均成绩的学生的姓名、考试的课程名和考试成绩。

select Sname,Cname,Grade from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Grade>(select AVG(Grade) from SC,Student where Sdept='计算机系') and Sdept='计算机系';

4.  查询VB课程考试成绩高于VB平均成绩的学生姓名和VB成绩。

select Sname,Grade from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Cname='VB' and Grade>(select AVG(Grade) from SC,Course where SC.Cno=Course.Cno and Cname='VB');

5.  查询没选VB的学生姓名和所在系。

select Sname,Sdept from Student where Sno not in(select Sno from SC,Course where SC.Cno=Course.Cno and Cname='VB')

6.  查询每个学期学分最高的课程信息,列出开课学期、课程名和学分。

select Semester,Cname,Credit from Course c1 where not exists (select * from Course C2 where c1.Semester=c2.Semester and c1.Credit<c2.Credit)

7.  查询每门课程考试成绩最高的学生信息,列出课程号、学生姓名和最高成绩,结果按课程号升序排序,不包括没考试的课程。

select sc1.Sno,Sname,Cno,Grade from SC sc1,Student where not exists (select * from SC sc2 where sc1.Cno=sc2.Cno and sc1.Grade<sc2.Grade ) and Grade is not null and Student.Sno=sc1.Sno order by Cno

8.  查询计算机系学生姓名、年龄和年龄情况,其中年龄情况为:如果年龄小于18,则显示“偏小”;如果年龄在18-22,则显示“合适”;如果年龄大于22,则显示“偏大”。

 Select Sname,Sage, case

when Sage<18 then '偏小'

when Sage>=18 and Sage<=22 then '适合'

when Sage>22 then '偏大'

end

as 年龄情况 from Student

9.  统计每门课程的选课人数,包括有人选的课程和没有人选的课程,列出课程号,选课人数及选课情况,其中选课情况为:如果此门课程的选课人数超过100人,则显示“人多”;如果此门课程的选课人数在40100,则显示“一般”;如果此门课程的选课人数在140,则显示“人少”;如果此门课程没有人选,则显示“无人选”。

提示:选课情况列中显示的内容

Select Course.Cno,COUNT(Sno) as 选课人数,

case

when COUNT(Sno)>100 then '人多'

when COUNT(Sno)>=40 and COUNT(Sno)<=100 then '一般'

when COUNT(Sno)>=1 and COUNT(Sno)<40 then '人少'

when COUNT(Sno)=0 then '无人选'

end

as 人数情况 from SC right join Course on Course.Cno=SC.Cno group by Course.Cno

10.  查询计算机系选了VB课程的学生姓名、所在系和考试成绩,并将结果保存到新表VB_Grade中。

select Sname,Sdept,Grade into VB_Grade

from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Cname='VB'

 

11.  统计每个系的女生人数,并将结果保存到新表Girls中。

select Sdept,sex,COUNT(sex) as 人数 into Girls from Student where sex='' group by Sdept,sex

 

 

 

12.  创建一个新表,表名为test,其结构为(COL1, COL 2, COL 3),其中,

COL1:整型,允许空值。

COL2:普通编码定长字符型,长度为10,不允许空值。

COL3:普通编码定长字符型,长度为10,允许空值。

试写出按行插入如下数据的语句(空白处表示是空值)。

COL1

COL2

COL3

 

B1

 

1

B2

C2

2

B3

 

create table test(

COL1 int,

COL2 char(10) not null,

COL3 char(10) );

insert into test(COL2) values('B1');

insert into test values(1,'B2','C2');

insert into test(COL1,COL2) values(2,'B2')

13.利用第10题建立的VB_Grade表,将信息管理系选了VB课程的学生姓名、所在系和考试成绩插入到VB_Grade表中。

insert into VB_Grade select Sname,Sdept,Grade from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Sdept='信息管理系' and Cname='VB'

select *  from VB_Grade

14.  将所有选修C001课程的学生的成绩加10分。

update SC set Grade=Grade+10 where Cno='C001';

15.  将计算机系所有学生的“计算机文化学”的考试成绩加10分。

update SC set Grade=Grade+10 where Sno in(select SC.Sno from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Cname='计算机文化学')

16.  修改“VB”课程的考试成绩,如果是通信工程系的学生,则增加10分;如果是信息管理系的学生则增加5分,其他系的学生不加分。

提示:根据系别判断加分,case when

update SC set Grade=Grade+

case Sdept

when '通信工程系' then 10

when '信息管理系' then 5

else 0

end

from Student,SC,Course

where SC.Sno=Student.Sno and Course.Cno=SC.Cno and Cname='VB'

17.  删除成绩小于50分的学生的选课记录。

delete from SC where Grade<50

18.  删除计算机系VB考试成绩不及格学生的VB选课记录。

 delete from SC from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Sdept='计算机系' and Cname='VB ' and Grade<60

19.  删除“VB”考试成绩最低的学生的VB修课记录。

delete from SC from SC,Course where SC.Cno=Course.Cno and Cname='VB' and Grade=(select MIN(Grade) from SC,Course where SC.Cno=Course.Cno and Cname='VB')

20.  删除没人选的课程的基本信息。

delete from Course from Course left join SC on Course.Cno=SC.Cno where SC.Cno is null

select * from Course;

 

实验四、视图创建与使用

 1. 写出创建满足下述要求的视图的SQL语句,并执行所写代码。

(1)包含学生的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。

create view v1 as

select Student.Sno,Sname,Sdept,Sage,SC.Cno,Cname,Credit from

Student,SC,Course where Student.Sno=SC.Sno and Course.Cno=SC.Cno

 

(2)学生的学号、姓名、选修的课程名和考试成绩的视图。 

create view v2 as select Student.Sno,Sname,Cname,Grade from Student,SC,Course

where Student.Sno=SC.Sno and SC.Cno=Course.Cno

 

 

(3)统计每个学生的选课门数,要求列出学生学号和选课门数的视图。

create view v3 as select Sno,COUNT(Cno) CourseNum from SC group by Sno

(4)统计每个学生的修课总学分,要求列出学生学号和总学分的视图(说明:考试成绩大于等于60才可获得此门课程的学分)。

 create view v4 as select Sno,SUM(CreditSumCredit from SC,Course where SC.Cno=Course.Cno and Grade>=60 group by Sno

 

2.  利用第1题建立的视图,完成如下查询。

(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。

select Sname,Cname,Grade from v2 where Grade>90

 

(2)查询选课门数超过3门的学生的学号和选课门数。

select Sno,CourseNum from v3 where CourseNum>3

(3)查询计算机系选课门数超过3门的学生的姓名和选课门数。

select Sname,CourseNum from v3,Student where v3.Sno=Student.Sno and  CourseNum>3 and Sdept='计算机系'

(4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分。

select v4.Sno,Sname,Sdept,SumCredit from v4,Student where v4.Sno=Student.Sno and SumCredit>10

(5)查询年龄大于等于20岁的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分。

select Sname,Sage,Sdept,SumCredit from v4,Student where v4.Sno=Student.Sno and SumCredit>10 and Sage>=20

3.  使用WITH CHECK OPTION,在第1题建立的视图(1)的基础上,再创建一个“计算机系”同学的学号、姓名、所在系、年龄,课程号、课程名、课程学分的视图。

create view v5 as select * from v1 where Sdept='计算机系' with check option;

  1. 增加一条记录,

0841101

张新

计算机系

20

C001

高等数学

4

2)修改这条记录为

0841101

张新

物理系

20

C001

高等数学

4

以上两个操作是否能够实现?为什么?可以实现的,写出SQL语句。

   不能实现,因为修改会影响多个基表。

 

4.以下操作能否实现,如果能实现,给出相应的SQL语句,否则,解释不能实现的原因。

(1)对Student表,创建一个只包含男生信息的视图。对此视图执行将“李勇”的年龄更新为22岁。

 create view v6 as select * from Student where Sex=''

 update v6 set Sage=22 where Sname='李勇';

(2)在上题创建的视图中。删除“刘晨”同学的记录。

不能删除,因为刘晨同学的记录信息涉及了多张表

(3)第3题建立的“计算机系”同学的视图,对此视图执行将“李勇”的年龄更新为22岁。

update v5 set Sage=22 where Sname='李勇'

(4)第3题建立的“计算机系”同学的视图,对此视图执行删除“刘晨”同学的记录。

不可更新,因为修改会影响多个基表。

 

实验五、 数据库安全性访问控制

一、实验目的

1. 熟悉自主访问控制机制

2. 掌握在SQL Server中创建新登录名,创建数据库用户和角色的方法。

3. 熟练使用授权和回收语句实现自主访问控制。

 

二、实验内容和要求

利用前面建立的学生数据库和其中的Student、Course、SC表,并利用SSMS工具完成下列操作。

三、实验步骤

  1. 用SSMS工具建立SQL Server身份验证模式的登录名:log1、log2和log3。

方法一:图形界面方式。

点击安全性,右键点击登录名选择“新建用户名”

 

方法二:SQL语句

其他两个用户用SQL语句进行创建

create login log2 with password='123'

create login log3 with password='123'

 

  1. 用log1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能选中学生数据库?为什么?

打不开,因为没有创建数据库用户做映射。

 

 

3.    用系统管理员身份建立一个新的数据库引擎查询,将log1、log2和log3映射为学生数据库中的用户,用户名同登录名。

(1)创建用户log1,log2,log3。

方法一:图形界面方式。

点击学生数据库中安全性,点击用户,右键新建用户,如下图所示:

 

方法二:SQL语句

CREATE USER <用户名> FROM LOGIN <登录名>

create user log2 from login log2

create user log3 from login log3

(2)创建架构log1,log2,log3,架构所有者分别是用户log1,log2,log3

以log1为例,点击学生数据库,安全性,架构,右键新建架构:

  

(3)修改log1,log2,log3用户的默认架构

右键用户点击属性,修改架构,以log1为例:

  1. 在log1建立的数据库引擎查询中,现在在“可用数据库”下列列表框中是否能选中学生数据库?为什么?

可以的

5.      在log1建立的数据库引擎查询中,选中学生数据库,执行下述语句,能否成功?为什么?

不可以 还没有给log1用户授权

6.      在系统管理员的数据库引擎查询中,执行合适的授权语句,授予log1具有对Course表的查询权限,授予log2具有对Course表的插入权限。

grant select on Course to log1

grant insert on Course to log2

7.      用log2建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?

INSERT INTO Course VALUES('C1001','数据库基础',4,5)

能成功,log2对Course表有插入数据权限

再执行下述语句,能否成功?为什么?

SELECT * FROM Course

当然不行,没有查询的权限

8.      在log1建立的数据库引擎查询中,再次执行下述语句:

     SELECT* FROM Course

可以的,有查询的权限

这次能否成功?如果执行下述语句:

INSERT INTO Course VALUES('C103','软件工程',4, 5)

能否成功?为什么?

不能成功,没有权限

9.     登陆 log3,建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?

    CREATE TABLE NewTable(

      C1 int,

      C2 char(4))

不能成功,没有授予log3的建表权限

10.   授予log3在学生数据库中具有创建表的权限。

Grant CREATE TABLE to log3

 

11.  登陆log3用户,建立一个新的数据库引擎查询中,再次执行第9题的语句,能否成功?为什么?

可以了,因为已经授予它建表权限了

如果执行下述语句:

     SELECT * from NewTable

能否成功?为什么?

可以,对自己新建的表有权限

12.新建登陆名log4,映射为学生数据库用户log4,为该用户选定角色为db_Owner,登陆log4,看看是否能够访问数据库,执行以下操作

根据上面的步骤创建登录用户log4和数据库用户log4,还有架构,角色选定

(1)Select * from student

(2)INSERT INTO Course VALUES('C1016','VB基础',4,5)

(3)CREATE TABLE NewTable2(

      C1 int,

      C2 char(4))

能否进行,为什么?

可以进行,因为db_Owner拥有对所选数据库的所有权限

13.新建角色R1,赋予查询student表、更新Sc表grade列权限,将角R1授予用户log1,log2,接着执行

create role R1

grant select on student to R1 with grant option;

grant update(grade) on SC to R1 with grant option;

exec sp_addrolemember 'R1', 'log1'

exec sp_addrolemember 'R1', 'log2'

 

 

  1. Select * from student

(2)Update sc

Set grade=grade*0.9

验证log1,log2用户的相应权限。

Log1和log2是拥有R1角色的所有权限的

14. 用户log1的权限如果想转授权给log3,应该怎么操作?动手实践验证你的想法。

用户log1授权给log3只能授自己所拥有的权利(可选择允不允许log3继续授权with grant option)

Grant select on student to log3

Grant update on sc to log3

 

 

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核的无脸man~

你的鼓励是我创作的最大功力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值