数据库上机 (五) 数据库安全性访问控制
一、实验目的
熟悉自主访问控制机制掌握在SQL Server中创建新登录名,创建数据库用户和角色的方法。熟练使用授权和回收语句实现自主访问控制。
二、实验内容和要求
利用前面建立的学生数据库和其中的Student、Course、SC表,并利用SSMS工具完成下列操作。
用SSMS工具建立SQL Server身份验证模式的登录名:log1、log2和log3。
方法一:图形界面方式。
方法二:SQL语句
CREATE LOGIN WITH PASSWORD=’’
郑重声明:根据正常建立的发现,并不能连接成功,一直显示失败,如果你是第一次用这个数据库软件建立建立SQL Server身份验证模式,需要选择windows和SQL混合模式,并重启服务器,如果遇到不能连接问题可以参考这篇博客,链接呈上点击此处即可
方法一:图形界面方式,打开数据库软件,在左下角找到“安全性”,点击“登录名”,得到如图所示的页面,选择SQL Server身份验证模式,输入登录名和密码就可以了。点击左上角用户映射,映射到学生数据库,点击确定后刷新一下登录名,就可以看到自己设置的登录名。
方法二:新建查询输入以下SQL语句后执行即可完成SQL Server身份验证模式的登录名:log1、log2和log3和对应密码的设置。
create login log1
with password = '12345678' ;
create login log2
with password = '12345678' ;
create login log3
with password = '12345678' ;
用log1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能选中学生数据库?为什么?
答:不能,没有访问权限。
用系统管理员身份建立一个新的数据库引擎查询,将log1、log2和log3映射为学生数据库中的用户,用户名同登录名。
(1)创建用户log1,log2,log3。
方法一:图形界面方式。
略
方法二:SQL语句
CREATE USER FROM LOGIN
create user log1
from login log1 ;
create user log2
from login log2;
create user log3
from login log3 ;
(2)创建架构log1,log2,log3,架构所有者分别是用户log1,log2,log3
创建架构的方法很简单,参照此链接,点击此处查看
(3)修改log1,log2,log3用户的默认架构
在此图中出修改架构即可。
4. 在log1建立的数据库引擎查询中,现在“可用数据库”下列列表框中是否能选中学生数据库?为什么?
如图所示,显然是可以选中学生数据库的。
5. 在log1建立的数据库引擎查询中,选中学生数据库,执行下述语句,能否成功?为什
么?
SELECT * FROM Course
如图所示,显然不可以,没有对表的访问权限。
6. 在系统管理员的数据库引擎查询中,执行合适的授权语句,授予log1具有对Course表的查询权限角色权限设计5张表,授予log2具有对Course表的插入权限。
grant select
on Course
to log1;
grant insert
on Course
to log2 ;
在系统管理员的数据库输入如下SQL语句,授权log1和log2对Course表的访问权限。
7. 用log2建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?
INSERT INTO Course VALUES('C1001','数据库基础',4,5)
按道理来说游戏素材,已经授予log2插入Course表的权限,执行该语句原则上来说没有问题。。
再执行下述语句,能否成功?为什么?
SELECT * FROM Course
不能,无访问Course表的权限。
8. 在log1建立的数据库引擎查询中,再次执行下述语句:
SELECT* FROM Course
这次能否成功?
原则上来说可以执行成功,因为授予了log1相应权限。
如果执行下述语句:
INSERT INTO Course VALUES(‘C103’,‘软件工程’,4, 5)
能否成功?为什么?
原则上来说不可以,因为没有授予相应权限。
9. 登陆 log3,建立一个新的数据库引擎查询,执行下述语句,能否成功?为什么?
CREATE TABLE NewTable(
C1 int,
C2 char(4))
显然没有创建表的权限
10. 授予log3在学生数据库中具有创建表的权限。
Grant CREATE TABLE to log3
11. 登陆log3用户,建立一个新的数据库引擎查询中角色权限设计5张表,再次执行第9题的语句,能否成功?为什么?
如果执行下述语句:
SELECT * from NewTable
能否成功?为什么?
按道理来说,已经授予log3创建新表的权限,执行该语句原则上来说不应该有问题。
12.新建登陆名log4,映射为学生数据库用户log4,为该用户选定角色为db_Owner,登陆log4,看看是否能够访问数据库,执行以下操作
(1)Select * from student
(2)INSERT INTO Course VALUES(‘C1016’,‘VB基础’,4,5)
(3)CREATE TABLE NewTable2(
C1 int,
C2 char(4))
能否进行,为什么?
(1)可以访问,有访问权限。
(2)可以访问,有插入权限。
(3)可以访问游戏图片素材,有创建新表的权限。
13.新建角色R1,赋予查询student表、更新Sc表grade列权限,将角R1授予用户log1,log2,接着执行
(1)Select * from student
(2)Update sc
Set grade=grade*0.9
验证log1,log2用户的相应权限。
create role R1
grant select
on Student
to R1
with grant option ;
grant update
on SC
to R1
with grant option ;
EXEC sp_addrolemember 'R1', 'log1'
EXEC sp_addrolemember 'R1', 'log2'
按道理来说,此时log1和log2应该已经具有角色权限,可以执行成功以上两条语句。
14. 用户log1的权限如果想转授权给log3,应该怎么操作?动手实践验证你的想法。
转授权就可以。
上述诸题,如果操作能够成功,请给出相应SQL语句以及结果截屏,如果不能成功,请说明原因。
在第一次实验结果的基础上进行本次数据查询操作,提交查询结果。
实验报告应包括:实验标题、实验目的,实验内容,实验结果,实验小结
其中实验结果应包含本次实验要用到的SQL语句,能够执行的操作对结果进行截图,不能的进行也请对系统的拒绝结果窗口进行截图,并分析不能进行的原因。
实验小结
# 人潮拥挤,离别才是常态,相逢只是意外!
另注:博主遇到了一个bug,看了各种解决方案,然而并未解决,所以博客阐述的不够具体,时间有限,思路仅供参考!
文章来源:https://blog.csdn.net/nuist_NJUPT/article/details/106220380