这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助!
实验13用户管理及权限管理 本文
实验14并发控制 点我查看
实验15数据恢复 点我查看
课程名称 数据库基础
实验项目 实验13 用户管理及权限管理
1.实验目的:
理解和体会数据库安全性的内容,加强对数据库管理系统的安全管理功能的认识。
2.实验内容
- 登录用户和数据库用户的管理
- 角色管理
- 授权、拒绝权限和收回授权
3.实验要求
(1)以系统管理员身份完成如下实验。
- 建立3个不同名称的注册用户.
- 使用ALTER LOGIN命令对建立的注册用户用不同的修改.
- 建立一个数据为管理员用户
(2)以数据为管理员身份完成如下实验。
- 根据已有的注册用户建立几个当前数据库的用户。
- 使用ALTER USER命令修改部分用户设置。
- 建立若干角色,部分角色指定基他用户管理。
- 授权一些用户可以创建表等数据库对象。
- 完成角色管理及其他授权管理
(3)以下实验由若干学生一组共同完成。
- 每个用户有建立对像的权限,各自建立自已的对象(如表和视图等)。
- 各用户之间就表或视图的查询、修改、删除、插入等互相授权,在授权过程中体会GRANT命令中WITH GRANT OPTIN短语的作用。
- 分情况收回授权,并体会REVOKE命令中GRANT OPTION FOR 和CASCADE短语的作用
(4)在实验报告中要给出具体的操作要求和过程,并针对各种情况做出具体的分析和讨论。
4.实验准备
XXX太长了 省略......
5.实验过程(含代码、实验过程、遇到的问题和解决方法等):
关于用户权限的概念性问题和相关SQL代码研究了好久,总共尝试了三遍,每次做都有新的理解,下面为最后一次的理解:
最重要的就是概念性问题,首先对其中的概念总结一下:
登入用户:在SQL server 2012启动的时候需要登入的用户,登入用户必须要用数据库用户,否则无法登入。如下图所示:
服务器角色:书本154页,相当于java中“类”的概念。可以使用系统预定义的,也可以自己创建自定义权限的角色。
数据库角色:书本155页,相当于java中“对象”的概念。当一个数据库角色和服务器角色“连接”起来,那么这个数据库角色就含有该服务器角色所拥有的权限。
需要用到的函数:
sp_addrole函数在书本156页,用来创建新数据库角色,参数前者为数据库角色名称,后者为只读权限
sp_addrolemember函数在书本157页,用来连接数据库角色和数据库用户
题目1.1:建立3个不同名称的注册用户
图 1 创建三个用户,属性包括 用户名 和 密码 以及默认登入的数据库
这个时候创建的这三个用户,还无法登入,因为还没有打开“学生管理系统”数据库的权限,如果登入则显示:
题目1.2:使用ALTER LOGIN命令对建立的注册用户用不同的修改
图 2 分别修改三个用户的 用户名 和 密码
注:此题主要展示一下修改用户名和密码的语法,实际上没有修改,对后面过程没有影响
题目1.3:建立一个数据为管理员用户
图 3 把zwz01用户设置为sysadmin(书本154页)管理员,可以做任何事情
但是这个管理员用户下面没有数据库用户,还是不能登入:
题目2.1:根据已有的注册用户建立几个当前数据库的用户。
图 4 分别创建 两个 数据库用户
其中sp_addrole函数在书本156页,用来创建新数据库角色,参数前者为数据库角色名称,后者为只读权限
代码相当于使用系统的“只读”类,创建两个java对象,分别是zwz01和zwz02
这个zwz01和zwz02和登入用户的zwz01无关,这里重名了,以后有机会再改
题目2.2:使用ALTER USER命令修改部分用户设置
图 5 分别修改 两个用户 的 用户名
注:只是展示语法,实际上没有修改,对后面过程无影响
题目2.3:建立若干角色,部分角色指定基他用户管理
图 6建立两个角色‘zwzdatabase1’、‘zwzdatabase2’,和数据库用户“连接”起来
题目2.4:授权一些用户可以创建表等数据库对象(创建表、视图权限)
图 7 授权zwz01可以创建表
注:主要是展示语法,具体例子在第三大题
题目2.5完成角色管理及其他授权管理
图 8 红框内是查看数据库角色zwzdatabase1的用户,即zwz01
下方授权代码是授予zwz01用户相关权限
第三大题:
在完成第三大题之前,我们先创建三张表格,用于授予权限
图 9 创建三张表格
图 10 创建三个登入用户 分别是user01~03
此时还没和数据库角色连起来 是虚的
题目3.1:每个用户有建立对像的权限,各自建立自已的对象(如表和视图等)。
图 11 自定义一个数据库角色user 然后实例化给user01、02、03,即连接起来
分别赋予 各个用户 增删改查 自己表的权限
比如 user01表可以增删改查user01table 以此类推
题目3.2:各用户之间就表或视图的查询、修改、删除、插入等互相授权,在授权过程中体会GRANT命令中WITH GRANT OPTIN短语的作用。
第一步:首先我们退出SQL server,改用user01的账号登入 ,执行以下代码:
图 12 第一行代码为在自己的表中插入一行数据
第二行代码为查找自己表的全部信息,已经输出
第三行为把自己表的 增删改查 权限授权给 user02
第二步:然后我们再退出SQL server,改用user02的账号登入 ,执行以下代码:
首先查询user01table,因为user01已经赋予其权限,所以可以查到:
再查询user02table,因为这本来就是自己的表,所以也可以查询:
最后查询user03table,因为没有权限,无法访问
题目3.3:分情况收回授权,并体会REVOKE命令中GRANT OPTION FOR 和CASCADE短语的作用
我们先切换为user01的账号,执行以下代码:
即删除对user02的授权
然后再切换到user02的账号,查询表1,无法查询
6.实验总结(总结对SQL Server安全管理的理解、及其对各种安全管理方法和方式的体会等):
主要是概念问题,先是进入数据库所必须的登入用户,然后每个登入用户必须要有其下的数据库用户,每个数据库用户必须要有权限,权限具体内容由服务器角色提供。权限具体内容可以使用系统自带的服务器角色,也可以自定义。
思路很绕,大概有点理解,就是那种层次结构的感觉。