数据库实验实验13 用户权限管理实验.docx
《数据库实验实验13 用户权限管理实验.docx》由会员分享,可在线阅读,更多相关《数据库实验实验13 用户权限管理实验.docx(20页珍藏版)》请在冰豆网上搜索。
数据库实验实验13用户权限管理实验
实验报告
一、实验目的
掌握SQLServer中有关用户、角色及操作权限的设置方法。
二、实验内容
1.用超级用户登录学生数据库student。
2.建立两个新用户:
用户名stu1,密码stu1(登录名login1);用户名stu2,密码stu2(登录名login2)和用户名stu3,密码stu3(登录名login3)。
3.授予stu1对SCORE具有select和insert权限,授予stu1对student具有select,update,insert和delete权限,授予stu1对Course具有select,update,insert和delete权限。
4.授予stu2对SCORE具有select权限,授予stu2对student具有select权限,授予stu2对Course具有select权限;授予stu2对Course具有更新属性tname的权限。
5.测试授权
◆以用户Stu1登录学生数据库:
(1)查询SCORE、student和Course表中的所有数据;
(2)分别向SCORE、student和Course表中插入一组合法数据;
(3)分别对SCORE、student和Course表更改一个元组;
(4)分别对SCORE、student和Course表删除一个元组。
观察运行结果并分析原因。
◆以用户Stu2登录学生数据库:
(1)分别向SCORE、student和Course表中插入一组合法数据;
(2)更新Course表中课程号为’1’的课程的名称为’人工智能’;
(3)更新Course表中课程号为’1’的课程的学分为3。
观察运行结果并分析原因。
◆以用户Stu1登录学生数据库:
(1)收回stu1对SCORE表的select权限,对student表的update和insert权限,对Course表的delete权限;
(2)查询SCORE、student和Course表中的数据,观察运行结果;
(3)分别向SCORE、student和Course表中插入一组合法数据,观察运行结果;
(4)分别对SCORE、student和Course表更改一个元组,观察运行结果;
(5)分别对SCORE、student和Course表删除一个元组,观察运行结果。
思考Course是否具有delete权限执行效果有何不同?
6.创建数据库角色Myrole,设置访问student表的select和insert权限,并添加用户成员stu3。
以stu3登录查看验证。
7.使用SQL命令完成:
删除登录名login1、login2和login3;删除用户名stu1、stu2和stu3;删除角色Myrole。
三、实验学时
2学时
四、实验设备与环境
--1.Windows平台+SQLServer2005以上版本
--2.建立新用户:
用户名stu1,密码stu1(登录名login1);用户名stu2,密码stu2(登录名login2)和用户名stu3,密码stu3(登录名login3)
createloginlogin1withpassword='stu1';--创建sqlserver登录
createUserstu1forloginlogin1;
createloginlogin2withpassword='stu2';
createUserstu2forloginlogin2;
createloginlogin3withpassword='stu3';
createUserstu3forloginlogin3;
自己创建windows登录:
Lxxx(学号后三位)并添加为数据库用户SXXX
--CREATELOGIN[\]FROMWINDOWS;--windows登录
--3.授予stu1对SCORE具有select和insert权限,授予stu1对student具有select,update,insert和delete权限,授予stu1对Course具有select,update,insert和delete权限,并测试
--授权之前,执行一次相关操作,并查看相关结果,数据自定。
如:
SELECT*FROMSCORE--?
?
?
(以login1登录sqlserver,打开一个查询窗口)
insertscore….
grantselect,insert
onSCORE103
tostu1;
--授权之后,执行一次相关操作,并查看相关结果,数据自定。
SELECT*FROMSCORE--?
?
?
(以login1登录sqlserver,打开一个查询窗口)
insertscore….
Windows/sa登录
login1/login2/login3登录
SELECT*FROMSCORE--?
?
?
insertscore…--?
?
?
grantselect,insertonSCOREtostu1;
SELECT*FROMSCORE--?
?
?
insertscore…--?
?
?
…
…
--其他类似
SELECT*FROMstudent
grantselect,update,insert,delete
onstudent
tostu1;
grantselect,update,insert,delete
oncourse
tostu1;
--4.授予stu2对SCORE具有select权限,授予stu2对student具有select权限,授予stu2对Course具有select权限;授予stu2对Course具有更新属性CNAME的权限,并测试
授权之前执行相关操作并查看记过
grantselect
onScore103
tostu2;
授权之后执行相关操作并查看记过
grantselect
onstudent
tostu2;
grantselect
oncourse
tostu2;
grantupdate(CNAME)
oncourse
tostu2;
UPDATEcourse103SETCname='高等数学A'WHERECname='高等数学'
SELECT*FROMcourse103
--5.再次测试授权(选做)
--◆以用户Stu1登录学生数据库:
--
(1)查询SCORE、student和Course表中的所有数据;
select*
fromSCORE103;
select*
fromstudent103;
select*
fromcourse103;
--
(2)分别向SCORE、student和Course表中插入一组合法数据(自定);
InsertintoSCOREvalues(…);
没有权限,然后去给stu1插入权限
然后插入:
Insertintostudentvalues(…);
Insertintocoursevalues(…);
(3)分别对SCORE、student和Course表更改一个元组;
updateSCOREsetDEGREE=…WHERE…;
updatestudentsetSBIRTHDAY…WHERE…
updatecoursesetCNAME=…WHERE…;
--(4)分别对SCORE、student和Course表删除一个元组。
DeletefromSCOREWHERE…
DeletefromstudentWHERE…
DeletefromCourseWHERE…;
--◆以用户Stu2登录学生数据库:
--
(1)分别向SCORE、student和Course表中插入一组合法数据(自定);
insert
intoSCORE
values(…);
insert
intostudent
values(…);
insert
intocourse
values(…);
--
(2)更新Course表中课程号为’3-105’的课程的名称为’人工智能’;
updatecourse
setCname='人工智能'
whereCno='3-105';
--(3)更新Course表中课程号为’3-105’的tno改为804。
updatecourse
settnot=‘804’
whereCno='3-105';
--◆以用户Stu1登录学生数据库:
--
(1)收回stu1对SCORE表的select权限,对student表的update和insert权限,对Course表的delete权限;并测试
revokeselect
onSCORE
fromstu1;
revokeupdate,insert
onstudent
fromstu1;
revokedelete
onCourse
fromstu1;
--
(2)查询SCORE、student和Course表中的数据,观察运行结果;
select*
fromSCORE;
select*
fromstudent;
select*
fromcourse;
--(3)分别向SCORE、student和Course表中插入一组合法数据,观察运行结果;
insert
intoSCORE
values(…);
insert
intostudent
values(…);
insert
intocourse
values(…);
--(4)分别对SCORE、student和Course表更改一个元组,观察运行结果;
updateSCORE
setDEGREE=…WHERE…;
updatestudent
setSBIRTHDAY=….;
updatecourse
setCNAME=…WHERE…;
;
--(5)分别对SCORE、student和Course表删除一个元组,观察运行结果。
delete
fromSCORE
WHERE…;
delete
fromstudent
WHERE…
delete
fromCourse
WHERE…;
--6.创建数据库角色Myrole,设置访问student表的select和insert权限,并添加用户成员stu3。
以stu3登录查看验证。
createroleMyrole;
grantselect,insert
onstudent103
toMyrole;
execsp_addrolememberMyrole,stu3;
select*
fromstudent;
insert
intostudent
values…;
--7.删除登录名login1、login2和login3;删除用户名stu1、stu2和stu3;删除角色Myrole。
droploginlogin1;
droploginlogin2;
droploginlogin3;
dropuserstu1;
dropuserstu2;
dropuserstu3;
droproleMyrole;
8.固定服务器
由于固定服务器是在服务器层次上定义的,因此它们位于从属于数据库服务器的数据库外面。
下表列出了所有现有的固定服务器角色。
固定服务器角色
说明
sysadmin
执行SQLServer中的任何动作
serveradmin
配置服务器设置
setupadmin
安装复制和管理扩展过程
securityadmin
管理登录和CREATEDATABASE的权限以及阅读审计
processadmin
管理SQLServer进程
dbcreator
创建和修改数据库
diskadmin
管理磁盘文件
系统过程用来添加或删除固定服务器角色成员:
sp_addsrvrolemember
如:
sp_addsrvrolemember'LOGIN1',''sysadmin''
sp_dropsrvrolemember
如:
sp_dropsrvrolemember'LOGIN1','sysadmin'
(1)添加login2为固定服务器角色dbcreator成员,并验证相关权限(创建修改删除数据库(自定))
注意:
您不能添加、修改或删除固定服务器角色。
另外,只有固定服务器角色的成员才能执行上述两个系统过程来从角色中添加或删除登录账户。
创建一个登录,并添加到某固定服务器角色成员,测试其权限,如dbcreator。
9.固定数据库角色
固定数据库角色在数据库层上进行定义,因此它们存在于属于数据库服务器的每个数据库中。
下表列出了所有的固定数据库角色。
固定数据库角色
说明
db_owner
可以执行数据库中技术所有动作的用户
db_accessadmin
可以添加、删除用户的用户
db_datareader
可以查看所有数据库中用户表内数据的用户
db_datawriter
可以添加、修改或删除所有数据库中用户表内数据的用户
db_ddladmin
可以在数据库中执行所有DDL操作的用户
db_securityadmin
可以管理数据库中与安全权限有关所有动作的用户
db_backoperator
可以备份数据库的用户(并可以发布DBCC和CHECKPOINT语句,这两个语句一般在备份前都会被执行)
db_denydatareader
不能看到数据库中任何数据的用户
db_denydatawriter
不能改变数据库中任何数据的用户
除了上表中列出的固定数据库角色之外,还有一种特殊的固定数据库角色,名为public,这里将首先介绍这一角色。
public角色
public角色是一种特殊的固定数据库角色,数据库的每个合法用户都属于该角色。
它为数据库中的用户提供了所有默认权限。
这样就提供了一种机制,即给予那些没有适当权限的所有用户以一定的(通常是有限的)权限。
public角色为数据库中的所有用户都保留了默认的权限,因此是不能被删除的。
系统过程用来添加或删除固定数据库角色成员:
sp_addrolemember
将安全帐户作为当前数据库中现有数据库角色的成员进行添加。
用法
sp_addrolemember[@rolename=]'role', [@membername=]'security_account'
EXECsp_addrolemember'db_ddladmin','dbuser1'
sp_droprolemember
从当前数据库中的角色中删除安全帐户。
语法
sp_droprolemember[@rolename=]'role', [@membername=]'security_account'
EXECsp_droprolemember'db_ddladmin','dbuser1'
创建一个数据库用户,并添加到某固定数据库角色成员,测试其权限,如db_ddladmin。
(2)添加stu3固定数据库角色db_ddladmin成员,并验证相关权限(创建修改删除表(自定),添加修改删除数据)
五、实验小结:
1、实验一开始login1登录不了,一直在找原因,后来在网上看到文章,具体解决办法如下:
然后重启
2、实验5中插入不了,有一些外键约束,不知道这个怎么搞,下来再研究一下。